![24cc5e9fa8ca019097ea1a55b7044bdb.gif](https://img-blog.csdnimg.cn/img_convert/24cc5e9fa8ca019097ea1a55b7044bdb.gif)
从0开始刷力扣,第四天。
刷题顺序
1 题目分析
628. 三个数的最大乘积 |
---|
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。 |
示例1:
输入: [1,2,3]
输出: 6
示例2:
输入: [1,2,3,4]
输出: 24
注意:
·给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
·输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。
2 数组排序
1、Arrays.sort(int[] a)
//这种形式是对一个数组的所有元素进行排序,并且是按从小到大的顺序。
2、Arrays.sort(int[] a, int fromIndex, int toIndex)
//这种形式是对数组部分排序,也就是对数组a的下标从fromIndex到toIndex-1的元素排序,注意:下标为toIndex的元素不参与排序
3、public static void sort(T[] a,int fromIndex, int toIndex, Comparator super T> c)//上面有一个拘束,就是排列顺序只能是从小到大,如果我们要从大到小,就要使用这种方式
3 思路解析
1.先排序.sort
2.全为正数 nums[nums.length-1]*nums[nums.length-2]*nums[nums.length-3]
3.全为负数 sort排序从小到大 nums[nums.length-1]*nums[nums.length-2]*nums[nums.length-3]
3.有正有负 负数选最小(绝对值最大)的两个得正乘正数最大nums[0]*nums[1]*nums[nums.length-1]
4 代码如下
class Solution {
public int maximumProduct(int[] nums) {
//排序
Arrays.sort(nums);
//全为正数 nums[nums.length-1]*nums[nums.length-2]*nums[nums.length-3]
//全为负数 sort排序从小到大 nums[nums.length-1]*nums[nums.length-2]*nums[nums.length-3]
//有正有负 负数选最小(绝对值最大)的两个得正乘正数最大nums[0]*nums[1]*nums[nums.length-1]
return Math.max(nums[0]*nums[1]*nums[nums.length-1],nums[nums.length-1]*nums[nums.length-2]*nums[nums.length-3]);
}
}
每日一汤
有人问我刷题有什么诀窍?
答案只有一个--熟能生巧you shou jiu xing
「大人不华,君子务实。」
---汉·王符《潜夫论·叙录》