628. 三个数的最大乘积
三个数相乘的最大值,有2种可能,(1)3个最大的正数(2)2个最小的负数和1个最大的正数。
方法一:先排序,排序后最小的负数和最大的正数位置就是确定的了
(1)必然是nums[n-3],nums[n-2],nums[n-1]
(2)必然是nums[0],nums[1],nums[n-1]
时间O(nlogn),空间O(logn)
1 public int maximumProduct(int[] nums) { 2 Arrays.sort(nums); 3 int n=nums.length; 4 return Math.max(nums[0]*nums[1]*nums[n-1],nums[n-3]*nums[n-2]*nums[n-1]); 5 }
方法二:本题实际上就是要找出最大的3个数和最小的2个数,加起来一个是5个值,
要找出这5个值除了排序后通过下标确定,还有种方法就是遍历的时候找出来,类比遍历数组找出最小值
时间O(n),空间O(1)
public int maximumProduct(int[] nums) { int min1=Integer.MAX_VALUE,min2=min1; int max1=Integer.MIN_VALUE,max2=max1,max3=max1; for(int num:nums){ if(num<min1){ min2=min1; min1=num; }else if(num<min2){ min2=num; } if(num>max1){ max3=max2; max2=max1; max1=num; }else if(num>max2){ max3=max2; max2=num; }else if(num>max3){ max3=num; } } return Math.max(min1*min2*max1,max1*max2*max3); }
争取早日不再是一只菜鸡
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步