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

628.三个数的最大乘积

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

示例 1:

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

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

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

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

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

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

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

int cmp(const void *p1,const void*p2)

{

    return *(int*)p1-*(int*)p2;

}

int maximumProduct(int* nums, int numsSize){

    qsort(nums,numsSize,sizeof(int),cmp);

    return fmax(nums[0]*nums[1]*nums[numsSize-1],nums[numsSize-3]*nums[numsSize-2]*nums[numsSize-1]);

}

时间复杂度:O(n*logn)

空间复杂度:O(logn)

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

相关文章:

  • 【数据结构】堆和集合笔记
  • java LinkedList 源码分析(通俗易懂)
  • Vue中实现路由跳转的三种方式详细分解
  • 全国自学考试03708《中国近现代史纲要》重点复习精要
  • 数据库面试题——锁
  • Python笔记 -- 文件和异常
  • 蓝桥杯刷题冲刺 | 倒计时24天
  • 真正理解微软Windows程序运行机制——什么是消息
  • HTTP 缓存的工作原理
  • RK3568在Android上进行驱动模块开发(源码外)
  • 操作技巧 | 在Revit中借用CAD填充图案的方法
  • Java的二叉树、红黑树、B+树
  • 昨天某读者拿到华为OD岗位offer,今天来分享一下经验,包含华为OD机试
  • 树的遍历方式(前中后,层序遍历,递归,迭代,Morris遍历)-----直接查询代码
  • Docker Registry部署镜像私有仓库及鉴权认证
  • stm32外设-中断详解
  • 第十四届蓝桥杯三月真题刷题训练——第 13 天
  • webgl_gpgpu_birds 样例分析
  • 以业务行为驱动的反入侵安全能力建设
  • Unity3d C#使用DOTween插件的Sequence实现系列动画OnComplete无效和颜色设置无效的问题记录
  • 【蓝桥杯-筑基篇】排序算法
  • 编辑器进化 VSCode + Vim
  • LearnOpenGL-高级OpenGL-6.天空盒
  • Printk打印内核日志
  • 界面控件DevExpress WPF 202计划发布的新功能合集
  • Spring Cloud Alibaba 微服务2,注册中心演变 + Nacos注册中心与配置中心
  • Navicat 图形化界面工具
  • 2023年网络安全比赛--attack(新)数据包分析中职组(超详细)
  • C语言之extern(七十)
  • 树的前中后序的Morris遍历