Leetcode 628.三个数的最大乘积
- 三个数的最大乘积
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 1:
输入: [1,2,3]
输出: 6
示例 2:
输入: [1,2,3,4]
输出: 24
注意:
给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。
class Solution {
public int maximumProduct(int[] nums) {
//进行排序,从小到大的顺序
quickSort(nums,0,nums.length - 1);
//最小的两个数和最大的数相乘,有可能两个最小数都为负数,其绝对值最大
int max = nums[0]*nums[1]*nums[nums.length - 1];
//最大的三个数
int max1 = nums[nums.length -1]*nums[nums.length - 2]*nums[nums.length - 3];
return max>max1?max:max1;
}
/**
*快速排序
*/
public static void quickSort(int[] arr,int start,int end){
if(start >= end)return;//设置结束点
int s = start;
int e = end;
int flag = start;//以第一个数为基准数
while(start < end){
//首先进行基准数与末尾的数进行比较大小
while((start < end)&&(arr[end] >= arr[flag])){
end--;
}
//基准数大于末尾的数进行交换位置
if(arr[end] < arr[flag]){
int temp = arr[end];
arr[end] = arr[flag];
arr[flag] = temp;
flag = end;
}
//基准数与开头的数进行比较大小
while((start < end)&&(arr[start] <= arr[flag])){
start++;
}
//基准数小于开头的数进行交换位置
if(arr[start] > arr[flag]){
int temp = arr[start];
arr[start] = arr[flag];
arr[flag] = temp;
flag = start;
}
}
//将所有的数都以基准数为中心分在两边,再依次进行相同的操作
quickSort(arr,s,start - 1);
quickSort(arr,end + 1,e);
}
}
执行结果:
通过
显示详情
执行用时:15 ms, 在所有 Java 提交中击败了5.02% 的用户
内存消耗:39.5 MB, 在所有 Java 提交中击败了99.84% 的用户