Leetcode 628.三个数的最大乘积

Leetcode 628.三个数的最大乘积

  1. 三个数的最大乘积

给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。

示例 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% 的用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值