LeetCode第二天(628. 三个数的最大乘积)

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

我的答案:(只通过了63个用例,没考虑到两个负数相乘得正的情况)

class Solution {public int maximumProduct(int[] nums) {Arrays.sort(nums);reverse(nums);return nums[0] * nums[1] * nums[2];}public void reverse(int[] nums) {int left = 0, right = nums.length - 1;while (left < right) {int temp = nums[left];nums[left] = nums[right];nums[right] = temp;left++;right--;}}
}

看了题解改的答案:

class Solution {public int maximumProduct(int[] nums) {Arrays.sort(nums);reverse(nums);int n = nums.length;return Math.max(nums[0] * nums[1] * nums[2],nums[0] * nums[n-1] * nums[n-2]);}public void reverse(int[] nums) {int left = 0, right = nums.length - 1;while (left < right) {int temp = nums[left];nums[left] = nums[right];nums[right] = temp;left++;right--;}}
}

官解:

方法一:排序
首先将数组排序。

如果数组中全是非负数,则排序后最大的三个数相乘即为最大乘积;如果全是非正数,则最大的三个数相乘同样也为最大乘积。

如果数组中有正数有负数,则最大乘积既可能是三个最大正数的乘积,也可能是两个最小负数(即绝对值最大)与最大正数的乘积。

综上,我们在给数组排序后,分别求出三个最大正数的乘积,以及两个最小负数与最大正数的乘积,二者之间的最大值即为所求答案。

class Solution {public int maximumProduct(int[] nums) {Arrays.sort(nums);int n = nums.length;return Math.max(nums[0] * nums[1] * nums[n - 1], nums[n - 3] * nums[n - 2] * nums[n - 1]);}
}
方法二:线性扫描(速度最快)

在方法一中,我们实际上只要求出数组中最大的三个数以及最小的两个数,因此我们可以不用排序,用线性扫描直接得出这五个数。

class Solution {public int maximumProduct(int[] nums) {// 最小的和第二小的int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE;// 最大的、第二大的和第三大的int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE;for (int x : nums) {if (x < min1) {min2 = min1;min1 = x;} else if (x < min2) {min2 = x;}if (x > max1) {max3 = max2;max2 = max1;max1 = x;} else if (x > max2) {max3 = max2;max2 = x;} else if (x > max3) {max3 = x;}}return Math.max(min1 * min2 * max1, max1 * max2 * max3);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/772044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ResultMap 映射

过在 MyBatis 的映射文件中使用 <result> 标签进行映射后&#xff0c;SQL 查询语句就可以使用 Java 实体类中的属性名来编写。当你在 ResultMap 中使用 <result> 标签将数据库表的字段名和 Java 实体类的属性名进行映射后&#xff0c;MyBatis 在执行 SQL 查询时会自…

【自我提升】计算机领域相关证书

目录 计算机技术与软件专业资格&#xff08;水平&#xff09;考试证书&#xff08;软考&#xff09;Oracle认证Cisco认证微软认证红帽认证AWS认证 计算机技术与软件专业资格&#xff08;水平&#xff09;考试证书&#xff08;软考&#xff09; 计算机技术与软件专业技术资格&a…

掌握Yarn:一步步安装、配置及应用全解析!

深入理解Yarn&#xff1a;安装、配置与实战应用 引言一、 Yarn简介二、 Yarn的安装三、 Yarn的基本使用四、 Yarn的高级功能五、 Yarn与持续集成/持续部署&#xff08;CI/CD&#xff09;六、 Yarn的定制化与扩展七、 社区和生态系统 引言 大家好&#xff0c;这里是程序猿代码之…

【数仓】DataX软件安装及配置,从mysql同步到hdfs

相关文章 【数仓】基本概念、知识普及、核心技术【数仓】数据分层概念以及相关逻辑【数仓】Hadoop软件安装及使用&#xff08;集群配置&#xff09;【数仓】Hadoop集群配置常用参数说明【数仓】zookeeper软件安装及集群配置【数仓】kafka软件安装及集群配置【数仓】flume软件安…

C++中的内存分区

栈&#xff1a;在执行函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中&#xff0c;效率很高&#xff0c;但是分配的内存容量有限 堆&#xff1a;就是那些由 new分配的内…

Prometheus(六):Blackbox监控安装配置

目录 1 Blackbox Exporter安装配置1.1 Blackbox Exporter简介1.2 安装1、安装-使用源码包安装下载安装blackbox.yml文件配置快速启动文件 2、安装-使用docker 1.3 Prometheus配置1、http监控2、ping探测-ip3、https probe-DNS解析4、metrics配置5、TCP监控-探测端口 总结 1 Bla…

2022全球AI生物智药大赛赛道二参赛攻略@paipai

大家好&#xff0c;我是来自paipai队的徐一帆&#xff0c;Github ID IvanaXu [01]&#xff0c;相关研究工作都会开源在上面&#xff0c;欢迎大家关注&#xff01; 以下是关于本次“云上进化”2022全球AI生物智药大赛 [02]&#xff1a;赛道二“抗原抗体结合Epitope和Paratope精…

8.2024

我们知道第一个质数是2&#xff0c;第二个质数是3&#xff0c;第三个质数是5.... 请你计算第2023个质数? 代码&#xff1a; import java.util.ArrayList;public class 第八题 {public static void main(String[] args) {ArrayList<Object> list new ArrayList<>…

鸿蒙OS实战:【module的使用】

在开发HarmonyOS应用时&#xff0c;默认创建的工程会有一个entry module&#xff0c;实际应用场景为了代码或者功能解耦&#xff0c;我们需要用到module来进行隔离。根据鸿蒙3.0/3.1/4.0官方指导&#xff0c;我们可以了解到关于module的类型&#xff0c;以及依赖关系&#xff0…

代码随想录学习Day 18

530.二叉搜索树的最小绝对差 题目链接 讲解链接 思路&#xff1a;利用二叉搜索树的性质&#xff0c;其中序遍历序列是一个有序数组。所以先对二叉搜索树进行中序遍历&#xff0c;得到一个递增的数组后&#xff0c;再遍历整个数组&#xff0c;依次求相邻值的差&#xff0c;最…

漏洞扫描-让安全弱点无所遁形

随着信息技术的迅猛发展和互联网的广泛普及&#xff0c;网络安全问题日益凸显。在这个数字化的世界里&#xff0c;无论是企业还是个人&#xff0c;都面临着前所未有的安全威胁。安全漏洞&#xff0c;作为这些威胁的源头&#xff0c;常常被忽视或无法及时发现。 而漏洞扫描&…

静态住宅IP优缺点,究竟要怎么选?

在进行海外 IP 代理时&#xff0c;了解动态住宅 IP 和静态住宅 IP 的区别以及如何选择合适的类型非常重要。本文将介绍精态住宅 IP 特点和&#xff0c;并提供选择建议&#xff0c;帮助您根据需求做出明智的决策。 静态住宅 IP 的特点 静态住宅 IP 是指 IP 地址在一段时间内保…

C++11 手写线程池

#include<bits/stdc.h> #include<thread> #include<mutex> #include<condition_variable> #include<functional> //https://www.bilibili.com/video/BV1d841117SH?p9&vd_source4943da2c9c0dacb95119f2042d2dfacc /*** 线程池&#xff1a;预…

echarts图表自适应和其他问题

1.使用 eCharts 提供的 resize()方法&#xff0c;监听图表容器的大小并改变图表大小 // 监听 resize 事件 window.addEventListener("resize", function () {this.chart.resize(); }); 报错如下&#xff1a;Uncaught TypeError: Cannot read properties of undefine…

经验篇04-为什么学了很多知识/读了很多书却没用

前言 以下内容是参加古典老师的写作训练营&#xff0c;古典老师分享的视频课程&#xff0c;对于喜欢阅读或者学习的人来说&#xff0c;可以揭开【学了很多东西却没用】这个问题的神秘面纱&#xff0c;我个人收获非常大&#xff0c;结合了一些自己的理解&#xff0c;形成此文&am…

数据链路层(四):数据链路层协议

目录 1 数据链路层协议1.1 异步协议1.2 同步协议1.3 局域网数据链路层协议1.4 广域网数据链路层协议 1 数据链路层协议 数据链路层“协议”也称为“规程”&#xff0c;数据链路控制协议也称数据链路控制规程。 数据链路控制协议主要分为异步协议和同步协议两大类。 1.1 异步协…

java常用IO流功能——字符流和缓冲流概述

前言&#xff1a; 整理下学习笔记&#xff0c;打好基础&#xff0c;daydayup! 之前说了下了IO流的概念&#xff0c;并整理了字节流&#xff0c;有需要的可以看这篇 java常用应用程序编程接口&#xff08;API&#xff09;——IO流概述及字节流的使用 字符流 FileReader(文件字…

leetcode 1218.最长定差子序列

思路&#xff1a;动态规划。 其实这道题和最长递增子序列很像&#xff0c;都是以数字为结尾的dp形式&#xff0c;也就是把判断条件改了一下就是了。 这里首先我们用二重循环来做一下&#xff0c;发现会时间超时&#xff0c;因为这里的时间数是大于10万的&#xff0c;所以要么…

docker 共享内存不足问题

在启动容器时增加共享内存大小&#xff1a; 您可以通过在docker run命令中添加--shm-size参数来指定更大的共享内存大小。例如&#xff0c;如果您需要32GB的共享内存&#xff0c;可以这样做&#xff1a; docker run --shm-size32g -it your-docker-image 这里的your-docker-im…

SAP Fiori开发中的JavaScript基础知识2 - 变量,操作符,值,类型

1. JavaScript代码示例 在介绍JavaScript具体语法前&#xff0c;让我们先看一段在Web应用程序过程中的JS代码片。 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>First JavaScript Application!</title><scr…