实现该算法主要思想是,

1.两个负数与与一个正数相乘


2.全为最大正数相乘得到最大值

下面用算法实现,时间复杂度为O(n),下面用java实现,不过有一些为0的情况排除下可以,还有一些整形过大可以变为long型,这边不做累赘。


    
  1. package com.meituan.test;
  2. public class Test {
  3. public static void main(String[] args) {
  4. int[] arr = { -10, -1, 0, 2, 34, 1, 10, 8, 9 };
  5. getMax(arr);
  6. }
  7. public static void getMax(int[] arr) {
  8. int max = 1, second_max = 1, third_max = 1;
  9. int min = 1, second_min = 1;
  10. for (int i = 0; i < arr.length; i++) {
  11. if (max < arr[i]) {
  12. third_max = second_max;
  13. second_max = max;
  14. max = arr[i];
  15. } else if (second_max < arr[i]) {
  16. third_max = second_max;
  17. second_max = arr[i];
  18. } else if (third_max < arr[i]) {
  19. third_max = arr[i];
  20. } else if (arr[i] < min) {
  21. second_min = min;
  22. min = arr[i];
  23. } else if (arr[i] < second_min) {
  24. second_min = arr[i];
  25. }
  26. }
  27. int max1=max*second_max*third_max;
  28. int max2=max*second_min*min;
  29. if(max1>=max2){
  30. System.out.println("max:"+max+" second_max:"+second_max+" third_max:"+third_max+" result:"+max1);
  31. }else{
  32. System.out.println("max:"+max+" second_min:"+second_min+" min:"+min+" result:"+max2);
  33. }
  34. }
  35. }

结果:

max:34   second_max:10 third_max:9     result:3060

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

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

    题目描述 给定一个无序数组,包含正数.负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 输入描述: 无序整数数组A[n] 输出描述: 满足条件的最大乘积 ...

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

    这里要注意的是当数字足够大的时候,我们要使用long long形式的类型,用来记录那个最大值 最大值共有四种情况: 三个正数:数字本身越大则乘积越大 两个负数一个正数:负负得正,所以两个负数最小,之积 ...

  3. 2020-06-10:给定一个无序数组,里面数都是成双数的,只有一个数是成单数的,求这个数? 如果上面那题里面有两个单数,怎么求出来?

    1.异或 2.字典或集合 3.排序 golang语言采用异或方式,代码如下: package test22_singlenumber3import ("fmt""test ...

  4. 2020-06-09:给定一个无序数组,里面数都是成双数的,只有一个数是成单数的,求这个数?

    1.异或 2.字典或集合 3.排序 golang语言采用异或方式,代码如下: package test21_singlenumberimport ("fmt""testi ...

  5. 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

    题目描述 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 ...

  6. 给定一个整数数组,判断是否存在重复元素。

    存在重复元素 给定一个整数数组,判断是否存在重复元素. 如果存在一值在数组中出现至少两次,函数返回 true .如果数组中每个元素都不相同,则返回 false 示例 1: 输入: [1,2,3,1] ...

  7. 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标

    题目链接:https://leetcode-cn.com/problems/two-sum/solution/liang-shu-zhi-he-by-leetcode-2/ 给定一个整数数组 nums ...

  8. 有苦有乐的算法 --- 一个无序数组,如果从小到大排好序,任何一个元素任何一个元素移动索引长度不超过k,实现排序

    题目 一个无序数组,如果从小到大排好序,任何一个元素任何一个元素移动索引长度不超过k,实现从小到大排序 例: k=2 排序后,[4]移动2个索引,[6]移动2个索引,[1]移动2个索引,[3]移动2个 ...

  9. python步骤解析 给定一个整数数组和目标值_给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 例如给定nums = [2,7,11,15],target = 9...

    python解决方案 nums = [1,2,3,4,5,6] #假如这是给定的数组 target = 9 #假如这是给定的目标值 num_list = [] #用来装结果的容器 def run(nu ...

最新文章

  1. CTFshow 命令执行 web122
  2. 【PPT 下载】神策 2017 数据驱动大会干货限时分享!
  3. CRF++使用简介(windows下非接口)
  4. spring常见面试问题_Spring面试问题
  5. 1.0 Hadoop的介绍、搭建、环境
  6. Ubuntu 安装 chrome
  7. Maven项目构建练习
  8. [ZJOI2005]午餐 贪心+dp
  9. python时间序列模型有哪些_时间序列模型(ARIMA)
  10. php 根目录怎么写,php – 如何重写根目录中的目录
  11. 注册测绘师学习笔记(二)
  12. Java性能调优指南pdf阅读0-100页
  13. 蓝桥杯 算法训练 调和数列问题
  14. 高斯启发式Gaussian Heuristic 格理论相关知识
  15. deadline集群渲染_Maya笔记
  16. 使用mysql管理系统建表时,字段中有PK,NN,UQ,BIN,UN,ZF,AI基本字段类型标识的意义
  17. Ubuntu 下图像标注工具 labelImg 的安装及使用
  18. AtCoder Beginner Contest 165 D Floor Function 公式推导
  19. 版署:近期将清理所有未经审查进口游戏
  20. 三分钟了解interface和type的区别

热门文章

  1. 英语----状语从句连接词(下)
  2. SQLDirect组件库用户指南
  3. 激光测距传感器有哪些优势
  4. 高速差分信号AC交流耦合电容
  5. conda清除无用安装包
  6. (一)内连接与外连接区别
  7. 平层、错层、跃层、复式、loft的区别是什么?
  8. ffmpeg解码之使用C语言打印音视频信息
  9. haskell基本语法
  10. ArcGIS制图学习(4)