【leetcode】628.三个数的最大乘积

前言:剑指offer刷题系列

问题:

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

示例:

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

思路1:

  1. 先去计算输入列表 nums 的长度,并将结果存储在变量 nlen 中。这是为了后面的条件判断做准备。

  2. 然后通过比较列表的长度 nlen 是否等于 3 来检查列表中是否有且仅有三个元素。如果是的话,就直接返回这三个元素的乘积,因为在只有三个元素的情况下,无需排序,直接返回乘积即可。

  3. 如果列表长度不等于 3,那么这一行代码对列表 nums 进行排序。排序后,nums 中的元素将按升序排列,也就是从小到大排列。

  4. 在计算部分,先计算了两个可能的最大乘积,然后返回其中较大的那个。

    • 计算的是排序后的列表中,最小的两个数与最大的一个数的乘积。
    • 计算的是排序后的列表中,最大的三个数的乘积。

    这两个乘积中的较大者就是整个列表中三个数的最大乘积。

基于上述思考,代码如下:

class Solution:def maximumProduct(self, nums: List[int]) -> int:nlen = len(nums)    if nlen == 3:return nums[0] * nums[1] * nums[2]nums.sort()return max(nums[0]*nums[1]*nums[-1],nums[-1]*nums[-2]*nums[-3])

执行结果如下图:

image-20230922180102190.png

思路2:

  1. 一开始先对输入列表 nums 进行排序。排序后,nums 中的元素将按升序排列,也就是从小到大排列。
  2. 然后计算了排序后列表中最大的三个数的乘积。由于列表已经排序,最大的三个数将位于列表的末尾,因此通过索引 -1-2-3 可以访问到它们。这三个数相乘的结果被赋值给变量 res1
  3. then,计算了排序后列表中最小的两个数与最大的一个数的乘积。nums[0]nums[1] 分别是列表中的最小的两个数,而 nums[-1] 是最大的一个数。这三个数相乘的结果被赋值给变量 res2
  4. 最后一行比较了变量 res1res2 的值,然后返回其中较大的那个值。这就是函数的返回值,它表示输入列表中的三个数的最大乘积。

基于上述思考,代码如下:

class Solution:def maximumProduct(self, nums: List[int]) -> int:nums.sort()# 全正数 或者 全负数res1 = nums[-1]*nums[-2]*nums[-3]# 有正数有负数res2 = nums[0]*nums[1]*nums[-1]return max(res1, res2)

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

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

相关文章

Flask vs. Django:选择适合你的Web开发框架【第134篇—Flask vs. Django】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Flask vs. Django:选择适合你的Web开发框架 在选择一个适合你项目的Web开发框架…

【数据库】数据库基本知识

1.数据库的四个基本概念 1.1 数据:描述事务的符号记录 1.2 数据库:概括的说,数据库数据具有永久存储、有组织的、可共享的大量数据的集合,数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的…

如何使用Net2FTP+cpolar搭建专属文件共享站点并实现无公网IP远程访问——“cpolar内网穿透”

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一,特别是智能设备的大面积使用,无论是个人…

Java的类与对象

前言 Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们…

从单机到分布式微服务,大文件校验上传的通用解决方案

一、先说结论 本文将结合我的工作实战经历,总结和提炼一种从单体架构到分布式微服务都适用的一种文件上传和校验的通用解决方案,形成一个完整的方法论。本文主要解决手段包括多线程、设计模式、分而治之、MapReduce等,虽然文中使用的编程语言…

Spring6--IOC反转控制 / 基于XML管理bean

1. 容器IOC 先理解概念,再进行实际操作。概念比较偏术语化,第一次看可能看不懂,建议多看几遍,再尝试自己独立复述一遍,效果会好些 1.1. IOC容器 1.1.1. 控制反转(IOC) IOC (Inversion of Con…

【一起学Rust | 基础篇】rust线程与并发

文章目录 前言一、创建线程二、mpsc多生产者单消费者模型1.创建一个简单的模型2.分批发送数据3. 使用clone来产生多个生产者 三、共享状态:互斥锁1. 创建一个简单的锁2. 使用互斥锁解决引用问题 前言 并发编程(Concurrent programming)&#…

es 集群核心概念以及实践

节点概念: 节点是一个Elasticsearch的实例 本质上就是一个JAVA进程一台机器上可以运行多个Elasticsearch进程,但是生产环境一般建议一台机器上只运行一个Elasticsearch实例 每一个节点都有名字,通过配置文件配置,或者启动时候 -…

IBM:《CEO生成式 AI行动指南利用生成式 AI推动变革--所需了解的事项和所需采取的行动》

2024年2月IBM分享《CEO生成式 AI行动指南利用生成式 AI推动变革》报告。在该报告中,讨论了成功转型所必不可少的基本领导素质,并展示了如何将这些技能应用于培养 AI 赋能的人才、发展 AI 赋能的业务,以及利用 AI 赋能的数据与技术。 报告提到…

代码随想录算法训练营第十六天|104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

代码随想录算法训练营第十六天|104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数 104.二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数…

QT UI窗口常见操作

MainWidget::MainWidget(QWidget *parent): QWidget(parent), ui(new Ui::MainWidget) {ui->setupUi(this);// 设置主窗口背景颜色QPalette plt;plt.setColor(QPalette::Window,QColor(180,220,130));this->setPalette(plt);// 禁止窗口最大化按钮setWindowFlags(windowF…

你要的个性化生信分析服务今天正式开启啦!定制你的专属解决方案!全程1v1答疑!

之前在 干货满满 | 给生信小白的入门小建议 | 掏心掏肺版 中有提到,如果小伙伴们真的想学好生信,那编程能力是必须要有的!但是可能有些小伙伴们并没有那么多的时间从头开始学习编程,又或是希望有人指导或者协助完成生信分析工作&a…

Halcon ORC字符识别

OCR(Optical Character Recognition,光学字符识别)是通过使用OCR工具实现的。Halcon提供了一些用于进行字符识别的函数和工具,可以帮助用户实现文本的自动识别和提取。 read_ocr_class_mlp:用于读取一个经过训练好的OC…

【开源-土拨鼠充电系统】鸿蒙 HarmonyOS 4.0 App+微信小程序+云平台

✨本人自己开发的开源项目:土拨鼠充电系统 ✨踩坑不易,还希望各位大佬支持一下,在Gitee或GitHub给我点个 Start ⭐⭐👍👍 ✍Gitee开源项目地址👉:https://gitee.com/cheinlu/groundhog-charging…

2024-03-20 作业

作业要求: 1> 创建一个工人信息库,包含工号(主键)、姓名、年龄、薪资。 2> 添加三条工人信息(可以完整信息,也可以非完整信息) 3> 修改某一个工人的薪资(确定的一个&#x…

你的电脑打不开摄像头问题

我一直以为我电脑上的摄像头老是打不开是因为硬件不匹配的问题。知道我发现了我的拯救者Y7000的机身盘边的“摄像头开关”按钮。。。 我去,你的摄像头开关按钮怎么设置在机身旁边啊。。。。 —————————————————————— 2024年3月21日更新记录&a…

C++容器适配器与stack,queue,priority_queue(优先级队列)的实现以及仿函数(函数对象)与deque的简单介绍

🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🙈个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN&…

探索人工智能基础:从概念到应用【文末送书-42】

文章目录 人工智能概念人工智能基础【文末送书-42】 人工智能概念 人工智能(Artificial Intelligence,AI)作为当今科技领域的热门话题,已经深刻地影响着我们的生活和工作。但是,要理解人工智能,我们首先需…

2024年R1快开门式压力容器操作证考试题库及R1快开门式压力容器操作试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年R1快开门式压力容器操作证考试题库及R1快开门式压力容器操作试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人…

使用OpenCV实现人脸特征点检测与实时表情识别

引言: 本文介绍了如何利用OpenCV库实现人脸特征点检测,并进一步实现实时表情识别的案例。首先,通过OpenCV的Dlib库进行人脸特征点的定位,然后基于特征点的变化来识别不同的表情。这种方法不仅准确度高,而且实时性好&am…