LeetCode:三个数的最大乘积【628】

LeetCode:三个数的最大乘积【628】

题目描述

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

示例 1:

输入: [1,2,3]
输出: 6

示例 2:

输入: [1,2,3,4]
输出: 24

注意:

  1. 给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
  2. 输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。

题目分析

  仔细审题,我们发现,数组中元素的可以是负数,这也就说明,不一定是排序后的后三位数字是最大乘积

  那答案可能是两种情况:第一种:最后三位数字;第二种:最小的两个负数和最后一位正数。

  这样一分析,我们就理清了!

NOTE:做题过程中最重要的一个环节是对解的规模进行预估,如果是微小常数级别的,最好要把每一种情况搞清楚

Java题解

class Solution {
    public int maximumProduct(int[] nums) {
        int len = nums.length;
        Arrays.sort(nums);
        int val1 = nums[0]*nums[1]*nums[len-1];
        int val2 = nums[len-1]*nums[len-2]*nums[len-3];
        return Math.max(val1,val2);
    }
}

原文地址:https://www.cnblogs.com/MrSaver/p/9557646.html

时间: 2024-07-30 13:23:16

LeetCode:三个数的最大乘积【628】的相关文章

LeetCode 628. 三个数的最大乘积

题目描述 LeetCode 628. 三个数的最大乘积 给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积. 示例1 输入: [1,2,3] 输出: 6 示例2 输入: [1,2,3,4] 输出: 24 Java Code class Solution { public int maximumProduct(int[] nums) { int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.M

LeetCode 628. Maximum Product of Three Numbers三个数的最大乘积 (C++)

题目: Given an integer array, find three numbers whose product is maximum and output the maximum product. Example 1: Input: [1,2,3] Output: 6 Example 2: Input: [1,2,3,4] Output: 24 分析: 给定一个数组,返回其中三个元素乘积的最大值. 注意的是,这道题是可以有负数出现,且是求三个数的乘积,所以我们需要考虑负数的情况. 最先

[LeetCode] 628. 三个数的最大乘积 ☆

描述 给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积. 示例 1: 输入: [1,2,3]输出: 6示例 2: 输入: [1,2,3,4]输出: 24注意: 给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000].输入的数组中任意三个数的乘积不会超出32位有符号整数的范围. 解析 3个最大值的可能情况:3个正数   2个负数+1个正数. 代码 public static int maximumProduct(int[] nums) { if

力扣(LeetCode)三个数的最大乘积 个人题解

给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积. 示例 1: 输入: [1,2,3] 输出: 6 示例 2: 输入: [1,2,3,4] 输出: 24 注意: 给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]. 输入的数组中任意三个数的乘积不会超出32位有符号整数的范围. 因为这题里出现了负数,所以最大值并不是简单得取三个最大值就好了. 参考了评论区的做法,将这个问题分解为:三个最大值的乘积 和 两个最小值和一个最大值的乘积 二者之间

【LeetCode】数组-2(628)-数组中三个数相乘最大

题目不难: 思路一(排序取两端) 先排序,最后三个数相乘即可.(很快就想到了,但是没想全面 [??] ) 缺陷:没有考虑到有负数的情况,当至少有两个负数时,需要判断 最大数乘两个最小的负数 和 三个最大数相乘的大小,返回大的. 代码如下: public class Solution { public int maximumProduct(int[] nums) { Arrays.sort(nums); return Math.max(nums[nums.length - 1] * nums[nu

LeetCode 16 3Sum Closest 找出最接近指定target的三个数的和

题目: Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution. For example, given array S = {-

数组任意取三个数中乘积最大值

一.给定一个整型数组,包括正负值,找出取任意三个值的乘积最大 1.对整型排序(这里使用堆排序) //堆排序 private static void headSort(int arr[], int len) { int s = len / 2; for (int i = s; i >= 0; i--) { hSort(arr, i, len); } for (int i = len; i >0 ; i--) { swap(arr, 0 , i); hSort(arr, 0, i-1); } }

动态规划题目(三)——最大连续乘积子串

动态规划题目(三)--最大连续乘积子串 1. 题目描述 给一个浮点数序列,取最大乘积连续子串的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积连续子串为3,0.5,8.也就是说,上述数组中,3 0.5 8这3个数的乘积30.58=12是最大的,而且是连续的. 2. 动态规划求解 动态规划求解题目的时候最重要的是要找到状态转移方程! 针对这道题目,我们使用两个变量记录当前最大值maxEnd, 和当前最小值minEnd.为什么记录当前最小值呢?因为数组中会出现负数,乘以一个负数的话

数组中唯一出现一次的一个,两个,三个数,其余数都是偶数次出现(java版本)

首先在leetcode上面有这样类似的题,做法大致类似 1,首先是只出现一次的一个数 比较简单,直接全部亦或值就得到了 //只出现一次的一个数 public static int singleNumber1(int[] A) { int res=0; for(int i=0;i<A.length;i++) res^=A[i]; return res; } 2,只出现一次的两个数 则所有的值亦或肯定不为0,设最后的抑或结果为M,找到M从低到高为最先为1的位置,然后根据所有数在该位置为0或者1,分为