LeetCodeブラシの質問1464。配列内の2つの要素の最大積

LeetCodeブラシの質問1464。配列内の2つの要素の最大積

どこに行くのかわかりませんが、もう途中です!
会ったことはありませんが、時間は急いでいますが、ユシに会いました。本当に素晴らしい運命です。ご来店ありがとうございました!
  • トピック
    あなたの整数の配列を与えnums、あなたは二つの異なる配列インデックスを選択iし、jその(nums[i]-1)*(nums[j]-1)最大値を求めます。
    この式の最大値を計算して返してください。
示例 1 :
输入:nums = [3,4,5,2]
输出:12 
解释:如果选择下标 i=1 和 j=2(下标从 0 开始),则可以获得最大值,(nums[1]-1)*(nums[2]-1) = (4-1)*(5-1) = 3*4 = 12 。 
示例 2 :
输入:nums = [1,5,4,5]
输出:16
解释:选择下标 i=1 和 j=3(下标从 0 开始),则可以获得最大值 (5-1)*(5-1) = 16 。
示例 3 :
输入:nums = [3,7]
输出:12
  • ヒント
    • 2 <= nums.length <= 500
    • 1 <= nums[i] <= 10^3
  • コード1:
class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        nums.sort()
        return (nums[-1]-1) * (nums[-2]-1)
# 执行用时 :52 ms, 在所有 Python3 提交中击败了34.16%的用户
# 内存消耗 :13.7 MB, 在所有 Python3 提交中击败了100.00%的用户
  • アルゴリズムの説明:
    並べ替え関数sort()使用してnums、最大値と次に大きい値の積並べ替え、検索し(nums[-1]-1) * (nums[-2]-1)、結果を返します。
  • コード2:
class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        i = 0
        j = len(nums) - 1
        max_val = 0
        while i < j:
            temp = (nums[i]-1) * (nums[j]-1)
            if temp > max_val: max_val = temp
            if nums[i] > nums[j]: j -= 1
            else: i += 1
        return max_val
# 执行用时 :48 ms, 在所有 Python3 提交中击败了46.05%的用户
# 内存消耗 :13.5 MB, 在所有 Python3 提交中击败了100.00%的用户
  • アルゴリズムの説明:
    ダブルポインターメソッド、最大値の初期化、max_val = 0前後i = 02つのポインターの合計、j = len(nums) - 1配列のトラバース、ポインターインデックス要素の積の検索(nums[i]-1) * (nums[j]-1)、最大値との比較、最大値の更新。ポインタ要素のサイズを比較し、小さい方の要素のポインタを更新します。2つのポインターがサイズの関係を満たさず、ループが終了し、結果が返されます。
  • コード3:
class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        max_1 = max_2 = 1
        for i in range(len(nums)):
            if nums[i] >= max_1:
                max_2 = max_1
                max_1 = nums[i]
                continue
            if max_1 > nums[i] >= max_2:
                max_2 = nums[i]
        return (max_1 - 1) * (max_2 - 1)
# 执行用时 :36 ms, 在所有 Python3 提交中击败了94.58%的用户
# 内存消耗 :13.8 MB, 在所有 Python3 提交中击败了100.00%的用户
  • アルゴリズムの説明:
    ワンタイムトラバーサルメソッドは、最大値と2番目に大きい値を初期化しますmax_1 = max_2 = 1。現在の要素が最大値以上の場合if nums[i] >= max_1は、最大値を2番目に大きい値max_2 = max_1に割り当て、現在の要素を最大値に割り当てますmax_1 = nums[i]。ループを続行します。現在の要素が最大値未満、2番目に大きい値以上の場合if max_1 > nums[i] >= max_2、現在の要素を2番目に大きい値に割り当てmax_2 = nums[i]、結果を返し(max_1 - 1) * (max_2 - 1)ます。

おすすめ

転載: blog.csdn.net/qq_34331113/article/details/106649870