标签:max1 num 乘积 nums int max3 628 max2 三个
三个数相乘的最大值,有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); }
标签:max1,num,乘积,nums,int,max3,628,max2,三个 来源: https://www.cnblogs.com/jchen104/p/14703221.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。