给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大 java实现
2018-01-23 11:42
2296 查看
实现该算法主要思想是,
1.两个负数与与一个正数相乘2.全为最大正数相乘得到最大值
下面用算法实现,时间复杂度为O(n),下面用java实现,不过有一些为0的情况排除下可以,还有一些整形过大可以变为long型,这边不做累赘。
package com.meituan.test;
public class Test {
public static void main(String[] args) {
int[] arr = { -10, -1, 0, 2, 34, 1, 10, 8, 9 };
getMax(arr);
}
public static void getMax(int[] arr) {
int max = 1, second_max = 1, third_max = 1;
int min = 1, second_min = 1;
for (int i = 0; i < arr.length; i++) {
if (max < arr[i]) {
third_max = second_max;
second_max = max;
max = arr[i];
} else if (second_max < arr[i]) {
third_max = second_max;
second_max = arr[i];
} else if (third_max < arr[i]) {
third_max = arr[i];
} else if (arr[i] < min) {
second_min = min;
min = arr[i];
} else if (arr[i] < second_min) {
second_min = arr[i];
}
}
int max1=max*second_max*third_max;
int max2=max*second_min*min;
if(max1>=max2){
System.out.println("max:"+max+" second_max:"+second_max+" third_max:"+third_max+" result:"+max1);
}else{
System.out.println("max:"+max+" second_min:"+second_min+" min:"+min+" result:"+max2);
}
}
}
结果:
max:34 second_max:10 third_max:9 result:3060
相关文章推荐
- 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大
- 给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和。
- 一个长度为N的数组中包含正数 负数 0,请实现一个函数找出和为0的最长子数列
- 程序员面试金典——解题总结: 9.17中等难题 17.8给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和
- 给定n个矩阵{A1, A2, …,An},其中,Ai与Ai+1是可乘的,计算这n个矩阵的连乘积。从中找出一种乘次数最少的计算次序(矩阵连乘最优顺序Java语言实现
- 给定一个数组,当中有正负数,求当中的一段“子数组”(即任意长度,连续的数字), 使得这个“子数组”的和是所有“子数组”和中最大的
- 求一个不含0的数列(可以有正数和负数)的最大子序列乘积java
- 算法1:一个无序的int数组,包含正负数, 排序成:左边为负数 右边为正数
- 题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个 子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为 O(n)。
- 有一个整数数组(包括正数 负数 和0),给定一个M值,要求数组中的一个或多个值相加的和等于M,有多少种组合?
- 给定只包含正数的数组,给出一个方法,将数组中的数拼接起来,得到的数,是最大的。
- 给定一个整数数组,找出两个下标,要求后面下标所指的数减去前面下标所指的数之差最大
- 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个 子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。
- 一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和,求所有子数组的和的最大值,要求时间复杂度为O(n)。
- 如果给定一个数组arr[0,...N-1],要求找出相邻两个数的最大差值
- (bitmap)给定一个字符串数组,从中找出第一个只出现一次的字母
- [原]Java面试题-输入一个整型数组,找出最大值、最小值,并交换。
- 定义一个二维数组,写函数来实现对该二维数组求最大值。(要求,用行指针为函数形参)
- JAVA冒泡排序/JAVA冒泡排序再找出给定数据中的最大值最小值/JAVA数组排序
- 给定一个数组,数组中有正负数,求出所有字数组中和值最大的值。