前往
大廳
主題

(Easy)Leetcode 2873. Maximum Value of an Ordered Triplet I

光陰LD | 2025-04-02 10:36:55 | 巴幣 2 | 人氣 30

Description:
給定一個數列nums,依序找到i , j, k(i < j < k),使得(nums[i]-nums[j]) * nums[k]最大,若為負值則回傳0
思考:
# 乘數越大越好?
        # 一個區間內減法最大的兩數
        # i < j < k,這能不能來幫忙思考
        # GPT: 以j為中心去思考,找[0, j-1]最大的i,[j+1, k]最大的k
那就,先找到最小的j,然後從他那邊開始找左右
        mid = min(nums[1:len(nums)-1]) # len(nums) >= 3
        j = nums.index(mid)
        return max(0, (max(nums[0:j]) - mid) * (max(nums[j+1:len(nums)])))
但這樣不一定會找到最小的
ex: [8,6,3,13,2,12,19,5,19,6,10,11,9],會找到13,2,19,但19,5,19更大
=====
Prefix跟Sufix這個主題我也很弱呢,可以多練
正在校正身體的時間
今天要更早睡一點,起床頭有點痛

class Solution:
    def maximumTripletValue(self, nums: List[int]) -> int:
        n = len(nums)

        # Step 1: build prefix max
        prefix_max = [0] * n
        prefix_max[0] = nums[0]
        for i in range(1,n):
            prefix_max[i] = max(prefix_max[i-1], nums[i])
        
        # Step 2: build suffix max
        suffix_max = [0] * n
        suffix_max[-1] = nums[-1]
        for i in range(n-2, -1, -1):
            suffix_max[i] = max(suffix_max[i+1], nums[i])
        
        # Step 3: try each j
        max_value = 0
        for j in range(1, n-1):
            left = prefix_max[j-1]
            right = suffix_max[j+1]
            value = (left - nums[j]) * right
            max_value = max(max_value, value)
        return max_value
送禮物贊助創作者 !
0
留言
追蹤 創作集

作者相關創作

更多創作