博客
关于我
LeetCode 628. 三个数的最大乘积 java版
阅读量:795 次
发布时间:2023-01-30

本文共 2132 字,大约阅读时间需要 7 分钟。

1. 官网:

2. 题目:

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

示例 1:

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

示例 2:

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

示例 3:

输入:nums = [-1,-2,-3]输出:-6

提示:

  • 3 <= nums.length <= 104
  • -1000 <= nums[i] <= 1000

3. 解:

    思路:1. 给数组排序 (Arrays.sort),如果没有这个sort 你会用什么排序呢?

               2. 取数组最大三个数相乘

              3. 两个负数和一个正整数乘积,也需要加入判断

package com.nami.algorithm.study.maxnum;import java.util.Arrays;/** * 描述: 三个数的最大乘积 * * @Author: lbc * @Date: 2024-04-16 16:09 * @email: 594599620@qq.com * @Description: keep coding */public class Solution {    /**     * 正常思路 排序后,最大三个数乘积即可     * 如果没有例子,两个负数和一个整数 这个条件容易遗忘。就会变成 ·1.排序  ·2.return,取最大三个数的乘积     *     * @param nums     * @return     */    public static int maximumProduct(int[] nums) {        // DualPivotQuicksort 包含多种排序,根据数量判断使用 哪种排序算法        // 这个sort 方法 比这道题nb        Arrays.sort(nums);        int len = nums.length;        return Math.max(nums[0] * nums[1] * nums[len - 1], nums[len - 1] * nums[len - 2] * nums[len - 3]);    }    public static void main(String[] args) {        int[] nums = new int[]{1, 4, 6, 8, 320, 33, -200, -100, 20};        System.out.println(maximumProduct(nums));    }}

 4. 解2:

     解1的延伸,解1 是排序,找到最小数次最小数最大数次最大数次次最大数,一次遍历找出五个数,可以不用排序算法,再进行判断

          1. 找出五个数

          2. 同上,计算最大数乘积,与最小数 * 次最小数 * 最大数乘积,判断最大值

public static int maximumProduct(int [] nums) {        // 最小值        int min1 = Integer.MAX_VALUE;        // 次最小值        int min2 = Integer.MAX_VALUE;                // 最大值        int max1 = Integer.MIN_VALUE;        // 次大值        int max2 = Integer.MIN_VALUE;        // 次次大        int max3 = Integer.MIN_VALUE;        for (int cur : nums) {            if (cur < min1) {                min2 = min1;                min1 = cur;            } else if (cur < min2) {                min2 = cur;            }            if (cur > max1) {                max3 = max2;                max2 = max1;                max1 = cur;            } else if (cur > max2) {                max3 = max2;                max2 = cur;            } else if (cur > max3) {                max3 = cur;            }        }        return Math.max(min1 * min2 * max1, max1 * max2 * max3);    }

5. 排序算法: 冒泡,快排,堆排序,插入,希尔排序,桶?哪个是稳定排序?,还记得思路以及实现代码吗?

转载地址:http://qagyk.baihongyu.com/

你可能感兴趣的文章
centos 7 静态IP,指定DNS
查看>>
flask框架高校竞赛信息管理系统(毕设源码+论文)
查看>>
flask框架魔方教学网站毕设源码+论文
查看>>
Flatterer: 快速JSON转换工具使用指南
查看>>
Flex / PHP Security Basics - Part One
查看>>
FLEX 4 :选择本地文件编辑
查看>>
Flex 与 spring mvc 整合 BlazeDB
查看>>
java 重载、重写、重构的区别
查看>>
Java 链表对象 链表翻转 对象中有对象的翻转 对象链表翻转指针
查看>>
JAVA- 清除数组重复元素
查看>>
Java---设计模式app小软件汇总应用
查看>>
Java-JUC(五):闭锁(CountDownLatch)
查看>>
java-如何给表格添加分页
查看>>
Java-笔记12
查看>>
java-设计模式-装饰器设计模式,代理设计模式和继承三种扩展方法的比较
查看>>
java.io.tmpdir
查看>>
java.lang.IllegalStateException: Optional int parameter 'id' is not present but cannot be translated
查看>>
java农副产品购物app的设计与开发(ssm)
查看>>
JAVA分布式系统
查看>>
java分布式链路追踪;jvm应用监控-skywalking
查看>>