排序题目:三个数的最大乘积

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法一
    • 思路和算法
    • 代码
    • 复杂度分析
  • 解法二
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:三个数的最大乘积

出处:628. 三个数的最大乘积

难度

3 级

题目描述

要求

给定一个整数数组 nums \texttt{nums} nums,在数组中找出三个数,使得这三个数的乘积最大,并返回最大乘积。

示例

示例 1:

输入: nums = [1,2,3] \texttt{nums = [1,2,3]} nums = [1,2,3]
输出: 6 \texttt{6} 6

示例 2:

输入: nums = [1,2,3,4] \texttt{nums = [1,2,3,4]} nums = [1,2,3,4]
输出: 24 \texttt{24} 24

示例 3:

输入: nums = [-1,-2,-3] \texttt{nums = [-1,-2,-3]} nums = [-1,-2,-3]
输出: -6 \texttt{-6} -6

数据范围

  • 3 ≤ nums.length ≤ 10 4 \texttt{3} \le \texttt{nums.length} \le \texttt{10}^\texttt{4} 3nums.length104
  • -1000 ≤ nums[i] ≤ 1000 \texttt{-1000} \le \texttt{nums[i]} \le \texttt{1000} -1000nums[i]1000

解法一

思路和算法

由于数组 nums \textit{nums} nums 中可能存在正数、零与负数,因此需要考虑当乘积最大时的三个数的所有可能情况。

  • 如果数组中的所有元素都是非负数,则任意三个数的乘积都是非负数,数组中的最大三个数的乘积即为最大乘积。

  • 如果数组中的所有元素都是负数,则任意三个数的乘积都是负数,为了使乘积最大应该使乘积的绝对值最小,数组中的最大三个数即为绝对值最小的三个数,乘积即为最大乘积。

  • 如果数组中同时有非负数与负数,则根据负数的个数,有两种可能的情况。

    • 如果数组中至少有两个负数,则当乘积最大时,最大乘积一定是非负数。可能选三个最大的非负数,也可能选一个最大的非负数与两个最小的负数(即两个绝对值最大的负数)。

    • 如果数组中只有一个负数,则任意三个数中至少有两个非负数,当乘积最大时,一定是选数组中的最大三个数。

根据上述分析可知,当乘积最大时,三个数的可能情况有两种,一是选数组中最大的三个数,二是选数组中最大的一个数与最小的两个数。对于这两种情况分别计算乘积,返回最大乘积。

代码

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

复杂度分析

  • 时间复杂度: O ( n log ⁡ n ) O(n \log n) O(nlogn),其中 n n n 是数组 nums \textit{nums} nums 的长度。排序需要 O ( n log ⁡ n ) O(n \log n) O(nlogn) 的时间。

  • 空间复杂度: O ( log ⁡ n ) O(\log n) O(logn),其中 n n n 是数组 nums \textit{nums} nums 的长度。排序需要 O ( log ⁡ n ) O(\log n) O(logn) 的递归调用栈空间。

解法二

思路和算法

由于计算最大乘积只需要得到数组中最大的三个元素与最小的两个元素,并不需要得到所有元素的顺序,因此可以直接遍历数组找到最大的两个元素。

遍历数组 nums \textit{nums} nums,遍历过程中维护最大的三个元素与最小的两个元素,对于每个元素 num \textit{num} num,与最大的三个元素以及最小的两个元素比较,并更新相应的元素值。遍历结束之后,即可得到最大的三个元素与最小的两个元素,并计算最大乘积。

代码

class Solution {public int maximumProduct(int[] nums) {int firstMax = Integer.MIN_VALUE, secondMax = Integer.MIN_VALUE, thirdMax = Integer.MIN_VALUE;int firstMin = Integer.MAX_VALUE, secondMin = Integer.MAX_VALUE;for (int num : nums) {if (num > firstMax) {thirdMax = secondMax;secondMax = firstMax;firstMax = num;} else if (num > secondMax) {thirdMax = secondMax;secondMax = num;} else if (num > thirdMax) {thirdMax = num;}if (num < firstMin) {secondMin = firstMin;firstMin = num;} else if (num < secondMin) {secondMin = num;}}return Math.max(thirdMax * secondMax * firstMax, firstMin * secondMin * firstMax);}
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是数组 nums \textit{nums} nums 的长度。需要遍历数组一次。

  • 空间复杂度: O ( 1 ) O(1) O(1)

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

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

相关文章

fastadmin最新版导出数据时 表格中会有 html标签的解决办法

fastadmin 自带的导出方法&#xff0c; 是一个纯前端的导出&#xff0c; 没有请求后台的接口 当我们使用导出功能时&#xff0c; 有些数据&#xff0c; 我们在设计的时候&#xff0c;配置的是 枚举类型的 但是当我们导出数据的时候&#xff0c; 居然导出的数据中带有 html 的…

使用el-col和el-row布局,有版心,一页有两栏布局 三栏布局 四栏布局 使用vue动态渲染元素

使用Vue结合Element UI的el-row和el-col组件来实现版心布局&#xff0c;并动态渲染不同栏数的布局&#xff0c;可以通过以下步骤实现&#xff1a; 定义版心容器&#xff1a;使用el-container来定义整个页面的容器&#xff0c;其中el-header、el-main、el-footer分别定义头部、主…

k8s-第十节-Ingress

Ingress 介绍 Ingress 为外部访问集群提供了一个 统一 入口&#xff0c;避免了对外暴露集群端口&#xff1b;功能类似 Nginx&#xff0c;可以根据域名、路径把请求转发到不同的 Service。可以配置 https 跟 LoadBalancer 有什么区别&#xff1f; LoadBalancer 需要对外暴露…

Promise解决异步编程问题

一个典型的异步编程问题&#xff1a;即您尝试在循环中发起多个异步请求&#xff0c;并希望在所有请求都完成后执行某些操作。然而&#xff0c;由于JavaScript的异步性质&#xff0c;num和total的比较在循环结束时立即执行&#xff0c;而不是在所有请求都完成后执行。这可能导致…

【12321骚扰电话举报受理中心-短信验证安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

开发常识:命令行终端、库源码、开发环境阶段

目录 命令行终端 集成开发环境&#xff08;IDE &#xff09;&#xff1a;有插件校验等限制&#xff0c;成功率低于操作系统 库源码 github上搜 官网 UNPKG托管开源的包 专业名词 环境 开发&#xff1a;本地机 开发和调试 生产&#xff1a;最终部署 测试&#xff1a;…

交流负载箱的主要功能有哪些?

交流负载箱可以模拟各种实际用电设备的功率、电流、电压等参数&#xff0c;使得电源系统在运行过程中能够承受实际负载的考验&#xff0c;确保电源系统的稳定运行。通过交流负载箱对电源设备进行测试&#xff0c;可以检测出电源设备在过载、短路等异常情况下的保护功能是否正常…

Linux和mysql中的基础知识

cpu读取的指令大部分在内存中&#xff08;不考虑缓存&#xff09; 任何程序在运行之前都的加入到内存。 eip->pc指针&#xff0c;指明当前指令在什么位置。 代码大概率是从上往下执行的&#xff0c;基于这样的基本理论。既可以将一部分指令加载到CPU对应的缓存中&#xf…

解决zip文件中文乱码问题

后台微服务运行在linux环境里&#xff0c;前端Vue。在一个项目中&#xff0c;把后台的文件打包成zip&#xff0c;下载到前台。结果发现zip文件名本身乱码&#xff0c;zip文件内压缩的文件也是乱码。所谓乱码&#xff0c;程序员都见过&#xff0c;就是中文变成了乱七八糟的字符。…

【CSAPP】-datalab实验

实验原理与内容 本实验每位学生拿到一个datalab-handout.tar文件。学生可以通过U盘、网盘、虚拟机共享文件等方式将其导入到Unbuntu实验环境中&#xff0c;选择合适位置存放。然后在Ubuntu环境下解压。解压后&#xff0c;根据文件中的叙述和要求更改bits.c文件。本次实验的主要…

【全网最全】2024年APMCM第十四届亚太地区大学生数学建模竞赛(中文赛项)完整思路解析+代码+论文

我是Tina表姐&#xff0c;毕业于中国人民大学&#xff0c;对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在&#xff0c;我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

云计算【第一阶段(26)】Linux网络设置

一、查看网络配置 1.查看网络接口信息ifconfig 查看所有活动的网络接口信息 2.ifconfig命令 查看指定网络接口信息 ifconfig 网络接口 &#xff08;1&#xff09;第一行&#xff1a;以太网卡的名字 ens33其中en代表以太网卡&#xff0c; centos6的是eth0&#xff0c; e…

本地maven仓库向远程仓库部署jar包

使用mvn命令即可&#xff0c;如下 mvn deploy:deploy-file \ -DgroupIdtop.rdfa.auth \ -DartifactIdrdfa-auth-spring-mvc-starter \ -Dversion3.0.0-20230718-RELEASE \ -Dpackagingjar \ -Dfile/Users/panmeng/Documents/repository/top/rdfa/auth/rdf…

中国算力网络市场发展分析

中国算力网络市场发展现状 算力涵盖计算、内存、存储等全方位能力&#xff0c;广泛分布于网络边缘、云计算中心、联网设备及转发节点。随着数字化技术革新&#xff0c;算力与网络正深度融合&#xff0c;推动“算网一体化”的演进。这一新型基础设施日渐凸显其重要性&#xff0c…

精准畜牧业:多维传感监测及分析动物采食行为

全球畜牧业呈现出一个动态且复杂的挑战。近几十年来&#xff0c;它根据对动物产品需求的演变进行了适应&#xff0c;动物生产系统需要提高其效率和环境可持续性。在不同的畜牧系统中有效行动取决于科学技术的进步&#xff0c;这允许增加照顾动物健康和福祉的数量。精准畜牧业技…

numpy库(python)

文章目录 1.numpy简介2.安装numpy3.ndarry : numpy库的心脏3.1 创建数组3.2数据类型3.3dtype NumPy是用Python.进行科学计算&#xff0c;尤其是数据分析时&#xff0c;所用到的一个基础库。它是大量Python 数学和科学计算包的基础&#xff0c;比如后面要讲到的pandas)库就用到了…

前端面试题_Css

一、说一下Css的盒子模型&#xff1f; HTML中所有元素都可以看成是一个盒子 盒子的组成&#xff1a;content、padding、border、margin 盒子的类型&#xff1a; 标准盒模型&#xff1a;marginborderpaddingcontent -- box-sizing&#xff1a;content-box&#xff08;默认&a…

Samtec汽车电子 | 汽车连接器如何在高要求、极端的环境中工作

【摘要/前言】 汽车电子&#xff0c;这些年来始终是极具流量的热门话题&#xff0c;目前不断发展的智能座驾、辅助驾驶等赛道都是对相关产业链需求的进一步刺激&#xff0c;这里蕴含着一片广阔的市场。 同样&#xff0c;广阔的市场里有着极高的准入门槛和事关安全的技术挑战。…

【AI】研发人员的《生存还是毁灭?》

AI在当前技术和社会环境下被视为一种强大的工具和辅助资源&#xff0c;而非一种取代人类开发者的替代品。在本文中&#xff0c;我们将详细探讨AI在多个领域的应用&#xff0c;如何与开发者相互作用&#xff0c;并分析AI对开发者角色的影响和未来的发展趋势。 引言 人工智能&a…

Windows安全认证机制——Windows常见协议

一.LLMNR协议 1.LLMNR简介 链路本地多播名称解析&#xff08;LLMNR&#xff09;是一个基于域名系统&#xff08;DNS&#xff09;数据包格式的协议&#xff0c;使用此协议可以解析局域网中本地链路上的主机名称。它可以很好地支持IPv4和IPv6&#xff0c;是仅次于DNS解析的名称…