当前位置: 首页 > news >正文

【C++刷题】力扣-#628-三个数的最大乘积

题目描述

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

示例

示例 1

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

示例 2

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

示例 3

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

题解

这个问题可以通过排序和考虑正数与负数的组合来解决。

  1. 排序:首先对数组进行排序。
  2. 考虑情况:
    ○ 如果数组中包含负数,最大的乘积可能来自两个最小的负数(它们的乘积为正数)和一个最大的正数。
    ○ 如果数组中不包含负数,最大的乘积就是最大的三个数的乘积。
  3. 计算最大乘积:根据排序后的数组,计算上述两种情况的乘积,并返回较大的那个。

代码实现

int maximumProduct(vector<int>& nums) {sort(nums.begin(), nums.end());int n = nums.size();// 情况1: 两个最小的负数和一个最大的正数int product1 = nums[0] * nums[1] * nums[n - 1];// 情况2: 三个最大的正数int product2 = nums[n - 1] * nums[n - 2] * nums[n - 3];return max(product1, product2);
}

复杂度分析

● 时间复杂度:O(n log n),其中 n 是数组 nums 的长度。主要时间消耗在排序上。
● 空间复杂度:O(1),除了输入数组外,我们只使用了常数个额外变量。
这个算法通过排序和考虑两种可能的情况来计算最大乘积。

http://www.lryc.cn/news/473871.html

相关文章:

  • Java项目实战II基于Java+Spring Boot+MySQL的工程教育认证的计算机课程管理平台(源码+数据库+文档)
  • 基于微信小程序实现信阳毛尖茶叶商城系统设计与实现
  • 设计一个灵活的RPC架构
  • 大数据计算里的Broadcast Hash Join/Shuffle Hash Join/Sort Merge Join
  • Java - 手写识别; 如何用spring ai和大模型做手写识别教程
  • 【Linux】用户权限管理:创建受限用户并配置特定目录访问权限
  • pgsql表分区和表分片设计
  • 灵动AI ——视频创作新引擎 开启视觉奇幻之旅
  • AI设计、作图、画画工具哪个好用?看完这篇你就知道怎么选了
  • 【python ASR】win11-从0到1使用funasr实现本地离线音频转文本
  • myqld二进制安装和破解数据库密码(linux)
  • 防重方案-订单防重方案笔记
  • HTML、JavaScript和CSS实现注册页面设计
  • Counter对象的使用样例
  • 大模型中的token是什么;常见大语言模型的 token 情况
  • Python小白学习教程从入门到入坑------第十七课 内置函数拆包(语法基础)
  • 动态规划 —— 路径问题-最小路径和
  • 《链表篇》---删除链表的倒数第N个节点(中等)
  • duilib 进阶 之 TileListBox 列表
  • Web应用安全—信息泄露
  • 大数据治理:策略、技术与挑战
  • vscode插件-08 Golang
  • 数据结构+算法分析与设计[15-18真题版]
  • 单链表OJ题(2):反转链表(三指针法)、找中间节点(快慢指针)
  • Rows 行
  • 十个常见的软件测试面试题,拿走不谢
  • windows 11 配置 kafka 使用SASL SCRAM-SHA-256 认证
  • Elasticsearch —— ES 环境搭建、概念、基本操作、文档操作、SpringBoot继承ES
  • ElSelect 组件的 onChange 和 onInput 事件的区别
  • 加密与数据提取:保护隐私的新途径