数均为正整数,乘积差直接两最大减去两最小即可
1.排序,时复O(n log n)
class Solution:
def maxProductDifference(self, nums: List[int]) -> int:
nums.sort()
return nums[-1] * nums[-2] - nums[0]*nums[1]
2.遍历,时复O(n)。遍历想法参考官方题解(. - 力扣(LeetCode))。我当时第一反应排序,没考虑时间复杂度。
class Solution:
def maxProductDifference(self, nums: List[int]) -> int:
# 遍历
a,b,c,d = 0,0,inf,inf
for x in nums:
if x > a:
a,b = x,a
elif x > b:
b = x
if x < c:
c,d = x,c
elif x < d:
d = x
return a*b - c*d
class Solution:
def findNonMinOrMax(self, nums: List[int]) -> int:
if len(nums) < 3:
return -1
a,b = nums[0],nums[1]
for i in range(2,len(nums)):
if nums[i] > a and nums[i] > b:
return max(a,b)
elif nums[i] < a and nums[i] < b:
return min(a,b)
else:
return nums[i]
我在写代码的时候忽略了一个问题,就是既然题目中写道“数组由 不同正整数 组成”,那在前三个数中一定有既不最大也不最小的数。我都写三个return了都没发觉哈哈哈。修改代码如下:
class Solution:
def findNonMinOrMax(self, nums: List[int]) -> int:
if len(nums) < 3:
return -1
a,b,c = nums[0],nums[1],nums[2]
if c > a and c > b:
return max(a,b)
if c < a and c < b:
return min(a,b)
return c
或者前三个排序(时间要稍慢一点):
class Solution:
def findNonMinOrMax(self, nums: List[int]) -> int:
if len(nums) < 3:
return -1
return sorted(nums[0:3])[1]
看了灵神(灵茶山艾府,我的偶像,yyds!!!)的解释才知道,三个数的排序是O(1)。(涨点小知识)