本文主要是介绍拼多多笔试题一:给出一个无序整数数组,求任意三个数的最大乘积,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:
给出一个可能包含正数、零、负数的无序整数序列,从该序列中任选三个数计算乘积,求最大的乘积是多少?
要求:算法的时间复杂度为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 stubScanner 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]);}}}
}
这篇关于拼多多笔试题一:给出一个无序整数数组,求任意三个数的最大乘积的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!