最值算法_1464
题目
来源:1464.数组中两元素的最大乘积
难度:简单
给你一个整数数组
n
u
m
s
nums
nums,请你选择数组的两个不同下标
i
i
i 和
j
j
j,使
(
n
u
m
s
[
i
]
−
1
)
∗
(
n
u
m
s
[
j
]
−
1
)
(nums[i]-1)*(nums[j]-1)
(nums[i]−1)∗(nums[j]−1) 取得最大值。
请你计算并返回该式的最大值。
2 < = n u m s . l e n g t h < = 500 2<=nums.length<=500 2<=nums.length<=500
1 < = n u m s [ i ] < = 1 0 3 1 <= nums[i] <= 10^3 1<=nums[i]<=103
解题思路
思路一
- 初始化两个变量,分别用来指向数组内第一大的数老大和第二大的数老二。
- 遍历数组中所有数,如果他比老大大,那么就让它代替老大,老大代替老二;如果他比老二大但不大于老大,就让他代替老二,老大不变。
- 返回数
思路二
- 利用sorted或list.sort()方法。
代码
思路一
class Solution:
def maxProduct(self, nums: List[int]) -> int:
numMax = 0 # 老大
numMax2 = 0 # 老二
for i in range(len(nums)):
if nums[i] > numMax and nums[i]> numMax2:
numMax2 = numMax
numMax = nums[i]
elif nums[i] <= numMax and nums[i] >numMax2:
numMax2 = nums[i]
return (numMax-1) * (numMax2-1)
思路二
class Solution:
def maxProduct(self, nums: List[int]) -> int:
nums.sort(reverse=True)
return (nums[0]-1) * (nums[1]-1)
794

被折叠的 条评论
为什么被折叠?



