如果我猜对了,您正在寻找该数组的一个子集,该子集在给定限制下具有最大乘积,并且输出类似于
arr[1]*arr[5]*arr[6]*arr[10]
是具有最大值的子集。产品。
为了做到这一点,您首先需要获取数组的幂集,即数组的所有可能子集,并计算每个子集的乘积,检查它是否是给定限制下的最大值。下面是一个示例:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
public class NewClass {
public static void main(String[] args) {
Integer[] array = {-5,1,-1,0,10,-10,9,-2,1001};
List<Integer> list = Arrays.asList(array);
Integer limit = 1000;
List<List<Integer>> powerset = getPowerset(list);
List<Integer> maxProdList = getMaxProduct(powerset,limit);
Integer prod =1;
for(Integer i : maxProdList){
prod*=i;
}
System.out.println("List: " + maxProdList );
System.out.println("max product: " + prod );
}
//returns all possible subsets [[-5],[-5,1,9],[1,-1,1001][-5,1,-1,0,10] ... and so on]
// see also http://stackoverflow.com/questions/1670862/obtaining-a-powerset-of-a-set-in-java
public static List<List<Integer>> getPowerset(Collection<Integer> list) {
List<List<Integer>> ps = new ArrayList<>();
ps.add(new ArrayList<>());
for (Integer item : list) {
List<List<Integer>> newPs = new ArrayList<>();
for (List<Integer> subset : ps) {
newPs.add(subset);
List<Integer> newSubset = new ArrayList<>(subset);
newSubset.add(item);
newPs.add(newSubset);
}
ps = newPs;
}
return ps;
}
public static List<Integer> getMaxProduct(List<List<Integer>> listOfLists, Integer limit){
List<Integer> listOfMax = new ArrayList<>();
Integer max = 1;
for(List<Integer> list : listOfLists){
Integer prod =1;
for(Integer i : list){
prod*=i;
}
if(prod>max && prod<=limit){
max=prod;
listOfMax = list;
}
}
return listOfMax;
}
}