笔试题 找到数组中,三个数乘积最大的结果
2017-08-06 12:29
253 查看
思路:先找到三个最大的数,求出乘积max1。再找两个最小的数,想乘后再乘以最大的数,得到乘积max2. 最终返回max1 max2的较大者
public static int maxThree(int[] arr){
//a[0]不用
int[] a=new int[4];
a[1]=arr[0];
a[2]=arr[1];
a[3]=arr[2];
if(a[1]<a[3]){
int temp=a[1];
a[1]=a[3];
a[3]=temp;
}
if(a[2]<a[3]){
int temp=a[2];
a[2]=a[3];
a[3]=temp;
}
if(a[1]<a[2]){
int temp=a[1];
a[1]=a[2];
a[2]=temp;
}
for(int i=0;i<arr.length;i++){
if(arr[i]>a[3]){
if(arr[i]>a[2]){
a[3]=a[2];
if(arr[i]>a[1]){
a[2]=a[1];
a[1]=arr[i];
}else{
a[2]=arr[i];
}
}else{
a[3]=a[i];
}
}
}
//然后找到两个最小的数
int[] b={arr[0],arr[1]};
if(b[0]>b[1]){
int temp=b[0];
b[0]=b[1];
b[1]=temp;
}
for(int i=0;i<arr.length;i++){
if(arr[i]<b[1]){
if(arr[i]<b[0]){
b[0]=arr[i];
b[1]=b[0];
}else{
b[1]=arr[i];
}
}
}
return Math.max(a[1]*a[2]*a[3], a[1]*b[0]*b[1]);
}
public static int maxThree(int[] arr){
//a[0]不用
int[] a=new int[4];
a[1]=arr[0];
a[2]=arr[1];
a[3]=arr[2];
if(a[1]<a[3]){
int temp=a[1];
a[1]=a[3];
a[3]=temp;
}
if(a[2]<a[3]){
int temp=a[2];
a[2]=a[3];
a[3]=temp;
}
if(a[1]<a[2]){
int temp=a[1];
a[1]=a[2];
a[2]=temp;
}
for(int i=0;i<arr.length;i++){
if(arr[i]>a[3]){
if(arr[i]>a[2]){
a[3]=a[2];
if(arr[i]>a[1]){
a[2]=a[1];
a[1]=arr[i];
}else{
a[2]=arr[i];
}
}else{
a[3]=a[i];
}
}
}
//然后找到两个最小的数
int[] b={arr[0],arr[1]};
if(b[0]>b[1]){
int temp=b[0];
b[0]=b[1];
b[1]=temp;
}
for(int i=0;i<arr.length;i++){
if(arr[i]<b[1]){
if(arr[i]<b[0]){
b[0]=arr[i];
b[1]=b[0];
}else{
b[1]=arr[i];
}
}
}
return Math.max(a[1]*a[2]*a[3], a[1]*b[0]*b[1]);
}
相关文章推荐
- 拼多多内推笔试一:求数组中任意三个数的最大乘积
- 拼多多笔试题一:给出一个无序整数数组,求任意三个数的最大乘积
- 在一个数组中找到连续的子数组最大的乘积
- 笔试题:求最大连续子数组的最大乘积
- 求数组中n-1个元素的乘积的最大值(某公司2007年校园招聘笔试试题)
- 求无序数组中的三个数的最大乘积
- 628. Maximum Product of Three Numbers数组中三个数乘积最大
- 无序数组中,三个数的乘积最大
- 笔试面试算法经典--连续子数组的最大乘积及连续子数组的最大和(Java)
- 每天一道LeetCode-----在给定数组中找到一个子数组,使得这个子数组的元素乘积最大
- 在数组中找到至少包含一个数字的子阵具有最大的乘积
- 2.13 子数组的最大乘积
- 动态规划算法 (微软笔试题,求连续子数组的最大和)
- LeetCode:152_Maximum Product Subarray | 最大乘积连续子数组 | Medium
- 长度为n的整形数组,找出其中的任意n-1个数乘积最大的那一组
- 笔试题:求子数组的最大和
- js算法总结(冒泡算法,在数组中找最大的三个数)
- 不排序,两种方法找到无序数组的最大K个数
- 《编程之美》学习笔记——2.13子数组的最大乘积
- 每天一道算法题(14)——N个降序数组,找到最大的K个数