拼多多笔试题一:给出一个无序整数数组,求任意三个数的最大乘积
题目:
给出一个可能包含正数、零、负数的无序整数序列,从该序列中任选三个数计算乘积,求最大的乘积是多少?
要求:算法的时间复杂度为O(n),空间复杂度为O(1).
输入:
第一行输入n表示序列中整数的个数
第二行输入n个整数
输出;
最大的乘积
例如:
输入:
4
1 0 -2 -4
输出:
8
import java.time.temporal.ValueRange; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[] array = new int[n]; for (int i = 0; i < array.length; i++) { array[i] = scanner.nextInt(); } int tem; //用array[0],array[1],array[2] 表示前三个最大的数 //先对array[0],array[1],array[2]由大到小进行排序 if(array[1]>array[0]) { tem = array[1]; array[1] = array[0]; array[0] = tem; } if(array[2]>array[0]) { tem = array[2]; array[2] = array[1]; array[1] = array[0]; array[0] = tem; }else { if(array[2]>array[1]) { tem = array[1]; array[1] = array[2]; array[2] = tem; } } for(int i = 3;i<array.length;i++) { //更新最大的三个数 if(array[i]>array[0]) { //交换这两个数 tem = array[0]; array[0] = array[i]; array[i] = tem; }else{ if(array[i]>array[1]) { tem = array[1]; array[1] = array[i]; array[i] = tem; }else if(array[i]>array[2]) { tem = array[2]; array[2] = array[i]; array[i] = tem; } } //如果个数大于4 则用array[3]表示最小的数 if(i>3) { if(array[3] > array[i] ) { tem = array[3]; array[3] = array[i]; array[i] = tem; } } //如果个数大于5,则用array[4]表示第二小的数 if(i>4) { if( array[4] > array[i] ) { tem = array[4]; array[4] = array[i]; array[i] = tem; } } } tem = array[0]*array[1]*array[2]; if(array.length == 3) { System.out.println(tem); } if(array.length == 4) { if(tem > (array[0]*array[2]*array[3]) ) { System.out.println(tem); }else{ System.out.println(array[0]*array[2]*array[3]); } } if(array.length >=5) { if(tem > (array[0]*array[3]*array[4])) { System.out.println(tem); }else{ System.out.println(array[0]*array[3]*array[4]); } } } }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 求一个数组中最大的相邻元素之和
- 下一篇: 给定一个无序数组,求这组数在排序后相邻数间差的最大值