基础算法:给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)

求解最大乘积问题 C++实现 给定一个无序数组,包含正数、负数和0,要求从中找到3个数的乘积,使得乘积最大,并且时间复杂度为O(n),空间复杂度为O(1)。 阅读详情
  • 这里要注意的是当数字足够大的时候,我们要使用long long形式的类型,用来记录那个最大值
  • 最大值共有四种情况:
    • 三个正数:数字本身越大则乘积越大
    • 两个负数一个正数:负负得正,所以两个负数最小,之积最大
    • 两个正数一个负数:
      • 这种情况,如果只有【正,正,负】【正,正,负,负】【正,正,负,负,负】【正,正,正,负,负】
      • 所有的情况都包含在第一种和第二种情况里,所以这种情况可以去掉。
    • 三个负数:
      • ​​​​​​​这种情况只有【负,负,负】这一种情况,这种情况和第一种相重合,所以也可以去掉
  • ​​​​​​​所以这里需要求五个数,三个最大,和两个最小,之后将上述的两种情况相比较,那个大就是那个
  • #include<stdio.h>
    #define N 10000
    int main(void){
    	int A[N]={0};
    	//输入数组个数;
    	int n;
    	scanf("%d",&n);
    	//输入数组
    	for(int k=0;k<n;k++){
    		scanf("%d",&A[k]);
    	}
    
    	int m1=0,m2=0,m3=0,x1=0,x2=0;
    
    	//找到最大的三位数以及最小的两位数
    	for(int i=0;i<n;i++){
    		if(A[i]>0){
    			if(A[i]>m1){
    				m3=m2;
    				m2=m1;
    				m1=A[i];
    			}else if(A[i]>m2){
    				m3=m2;
    				m2=A[i];
    			}else if(A[i]>m1){
    				m3=A[i];
    			}
    		}else{
    			if(A[i]<x1){
    				x2=x1;
    				x1=A[i];
    			}else if(A[i]<x2){
    				x2=A[i];
    			}
    		}
    	}
        long temp=m1*m2;
    	long long max=temp*m3;
    	temp = x1*x2;
    	long long max1=m1*temp;
    	if(max1>max)
    		max=max1;
    	printf("%lld",max);
    	return 0;
    }

     

刷题第三天——Lintcode304.最大乘积&187.加油站 三天没写题了,这两个是女神节写的。 304.最大乘积 题目描述:给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大。题目链接 point是 nums.size<=500000 -10000 <= nums[i] <= 10000−10000<=nums[i]<=10000 题目分析: 每次感觉自己想的十分复杂,其实十分easy。 (1)给数组从小到大排序 (2)找到正数三个最大的相乘,或者两个最小的数和最大的相乘。 publi... 阅读详情

相关推荐

三个数乘积

给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)

小白之歌 876

给出一个整数数组,有正有负有零,要求找出三个数,使其乘积最大

求三个数使乘积最大 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) //1.全都是正数,MAX1*MAX2*MAX3(最大的三个数相乘) //2.全都是负数,MAX1*MAX2*MAX3(最大的三个数相乘) //3.有正有负(1)最大应该是正数,因为有正有负的话,三个数相乘总能得到正数 // 只可能这样...

yyg15的博客 1415

三个数的最大积(贪心法)

三个数的最大积(贪心法)

假技术Po主 456

【牛客】最大乘积

题目描述 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 输入描述: 无序整数数组A[n] 输出描述: 满足条件的最大乘积 示例 输入 3 4 1 2 输出 24 Python解法 这道题用 Python可以直接使用内置乘法做出来,但我们这里不使用这种开挂的做法。 经常刷题的童鞋应该看到这个题目很容易想到n个数的...

Kanny 644

STM32控制舵机SG-5010转动,HAL库

首先设置时钟为72Mhz,预分频系数为72-1,自动重装载计数器的值为5000-1,这样的话就可以得到一个5ms的脉冲宽度,5000的计数值可以让舵机的旋转角度变得更加易控且相对精准,计算旋转角度的时候也可以更加精确。所以我们5ms脉宽,period是5000脉宽-------------角度----------pulse0.5ms-------------0度----------500;1.0ms------------45度---------1000;

qq_73783264的博客 1291

【企业微信自建应用-前端篇】企业微信自建应用开发流程详细介绍

最近接到需求,需要我在企业微信端自建一个应用,用来接受PC端派发的工单,告警,公告等内容。这里写一个帖子汇总一下我经历的全流程开发,当然这是基础的流程啊。因为功能要求也不高。后面如果开发更多的东西再补充。

weixin_44265726的博客 9397

牛客网:给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)

题目描述 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 输入描述: 无序整数数组A[n] 输出描述: 满足条件的最大乘积 示例1 输入 3 4 1 2 输出 24 代码: #!D:/workplace/python # -*- coding: utf-8 -*- # @File : ...

懒骨头707 2290

VS code平台调试AutoLISP程序教程

VS code平台调试AutoLISP程序教程

BearElder的博客 3183

给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大

题目描述 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 输入描述 无序整数数组A[n] 输出描述 满足条件的最大乘积 示例1: 示例1 输入 3 4 1 2 输出 24 源代码 #include<vector> #include<iostream> #include <algorit...

qq_29462849的博客 2672

【锂离子电池力学耦合及相场法模拟技术与应用】

8. 电化学仿真软件的使用与案例分析 (1) 各向异性纳米线锂化应力分析(实例讲解1) (2) 化学反应及死锂现象研究(案例分析2)(3) 锂化循环损伤计算(案例分析3)6. 4. 电池材料的力学与电化学耦合性能分析(1) 耦合效应对电池性能的影响(2) 耦合模型的验证与应。5. 5. 电池颗粒、极片、电芯尺度力-电-化-热多场耦合模型概述力学-7. 颗粒尺度耦合模型在电池失效分析中的应用。2. 2. 电池电极材料的分类与特性。5. (2) 耦合模型的验证与应用。电化学耦合模型与仿真。

weixin_51101456的博客 520

告别虚拟机!在WSL2的Ubuntu里5分钟跑通LVGL v9.2图形界面(附SDL2配置避坑)

本文详细介绍了如何在WSL2的Ubuntu子系统中快速配置LVGL v9.2图形库的SDL2模拟环境,帮助嵌入式开发者在5分钟内跑通第一个图形界面示例。通过WSL2和VSCode的远程开发插件,实现Windows系统下无缝使用Linux工具链,大幅提升开发效率。

weixin_28736335的博客 422

java笔试题-给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大

package com.zjp.offer.study; import java.io.IOException; import java.util.Scanner; /** * 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大. * 要求时间复杂度:O(n),空间复杂度:O(1) */ public class MaxProduct { public...

pengge_zjp的博客 2722

「API取数」FDL获取金蝶云星空的单据数据

本文介绍了如何使用FDL实现金蝶云API取数以及如何有效应对复杂的API数据处理场景。

oOBubbleX的博客 2026

从数组中找出乘积最大的三个数

题目: 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)  输入描述: 无序整数数组A[n] 输出描述: 满足条件的最大乘积 输入例子1: 3 4 1 2 输出例子1: 24 思路: 由于空间复杂度和时间复杂度的要求,肯定无法先排序,因为排序最好时为O(n).整数的值任意需要分

百尺竿头,更进一步 9022

深入理解JVM虚拟机第一篇:Java跨平台和字节码以及多语言混合编程

本位描述了Java的跨平台和JVM的跨平台的作用,Java语言的字节码的概念多语言混合编程应用到JVM虚拟机以及Java发展的重大事件。

七叔的博客 1万+

【YOLO目标检测全栈实战】68 模型量化:从FP32到INT8,精度不掉,速度翻倍

摘要: 模型量化能显著提升推理速度(如YOLOv5s帧率从15FPS提升至38FPS),但需避免三大误区:1)校准集需覆盖实际场景,而非随机采样;2)敏感层(如检测头)应保留FP32精度;3)预处理必须与量化前后一致。通过混合精度量化(Backbone用INT8,检测头用FP32)和逐通道量化,可实现<1%的mAP损失。关键步骤包括校准数据准备、量化感知训练及逐层精度评估,最终在Jetson Nano等边缘设备上实现速度与精度的平衡。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 145

O(n)求三个数乘积的最大值

题目描述 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 输入描述: 输入共2行,第一行包括一个整数n,表示数组长度 第二行为n个以空格隔开的整数,分别为A1,A2, … ,An 输出描述: 满足条件的最大乘积 示例1 输入 复制 4 3 4 1 2 输出 复制 24 //--无序数组...

qq_35747066的博客 1646

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 输入描述: 输入共2行,第一行包括一个整数n,表示数组长度 第二行为n

给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 输入描述: 输入共2行,第一行包括一个整数n,表示数组长度 第二行为n个以空格隔开的整数,分别为A1,A2, … ,An 输出描述: 满足条件的最大乘积 示例1 输入 复制 4 3 4 1 2 输出 复制 24 最暴力的方法,通过率55%,超...

沙粒橙 1066

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

无序数组最大乘积求解

题目: 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 思路如下: 先对数组进行排序 如果全为负数或全为正数,取最后三个数相乘既为最大乘积。关键是既有正数又有负数的情况(0其实可以看作负数)。如果...

chuiyuan9786的博客 770

LeetCode题练习与总结:三个数的最大乘积--628

本文详细介绍了如何在整型数组中找出由三个数组成的最大乘积,包括解题思路、具体代码实现、时间复杂度与空间复杂度分析以及涉及的知识点,为解决此类问题提供了清晰的指导。

一直学习永不止步 1028

长度为n的整形数组,找出其中的任意n-1个数乘积最大的那一组

问题描述:长度为n的整形数组,找出其中的任意n-1个数乘机最大的那一组,可以用乘法,但不能用除法,要求对算法处理的 时间复杂度和空间复杂度做出分析。 方法一: 首先能想到的一般方法就是暴力求解法。假设去掉第一个元素,求剩下n-1个乘积赋值给max,同时记录下下标index;然后假设第二个元素去掉,求剩下n-1个的乘积,若比前一个大则max等于当前值,index更新。重复此过程一直

hxwab的博客 3290

最大乘积

来源: 牛客网2018校招真题 题目描述: 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)  输入描述: 无序整数数组A[n] 输出描述: 满足条件的最大乘积 示例: 输入 4 3 4 1 2 输出 24 思路: 这道题包含三种情况,要找的这三个数全是正数,全是负数,有正有负,全是正...

while false 2778

寻找乘积最大的三个数

寻找乘积最大的三个数 题设要求:给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 输入描述:无序整数数组A[n] 输出描述:满足条件的最大乘积 输入例子1:3 4 1 2 输出例子1:24 问题分析:在数组中存在负数、正数、0的情况下,要获得三个数乘积最大,必然是最大的三个正数或者两个最小的负数和一个最大的正数。也就是说,...

冰美式的博客 1630

拼多多笔试题一:给出一个无序整数数组,求任意三个数的最大乘积

题目: 给出一个可能包含正数、零、负数的无序整数序列,从该序列中任选三个数计算乘积,求最大的乘积是多少? 要求:算法的时间复杂度为O(n),空间复杂度为O(1). 输入: 第一行输入n表示序列中整数的个数 第二行输入n个整数 输出; 最大的乘积 例如: 输入: 4 1 0 -2 -4 输出: 8 import java.time.temporal.ValueRa

YYC的专栏 5533
上一篇: TCP和UDP的区别和优缺点
下一篇: Java基础:JVM、JVM调优
Future_LL
博客等级 码龄9年 215粉丝 255原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值