问题是找到可以形成的最小和最大三重产品(3个数字的乘积),给定一组数字。我设法编写了一个完美的代码,但它具有复杂性(N^2)
。如果可能的话,我需要帮助将它减少到O(N)
。
编辑:数字可以是正数也可以是负数。
这是我的代码:
import java.util.*;
class Result {
public static int min =50000000;
public static int max =-50000000;
public static int solve(int pos, int currPro, int depth) {
if (depth==3){
check(currPro);
}
else {
for (int i=1; i<=Triplet.data.length-pos; i++){
if(pos+i < Triplet.data.length){
solve(pos+i,currPro*Triplet.data[pos+i],depth+1);
}
}
}
return 0;
}
public static void check(int currPro) {
if (currPro > max){
max = currPro;
}
if (currPro < min){
min = currPro;
}
}
}
class Triplet {
static int[] data;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt(); //Number of int
data = new int[num];
for (int i=0;i<num;i++){
data[i] = sc.nextInt();
}
if (num==3){
int result= data[0]*data[1]*data[2];
System.out.println(""+result+" "+result);
}
else{
Result.solve(-1, 1, 0);
System.out.println(""+Result.min+" "+Result.max);
}
}
}
答案 0 :(得分:4)
试试这个
运行时间 - O(N)