下面是一个面试问题:
输入:
整数n;不同的正整数a1,a2…一个;
输出:
最小正整数m,它不能以m=x1*a1+x2*a2+…xn*an表示,其中x= {0,1}。

最佳答案

天真的解决方案:

public static void calcAllSums(int[] arr, int sum, int curIndex, Hashtable<Integer,Boolean> sums){
    if (curIndex == arr.length) return;
    int sum1 = sum+arr[curIndex];
    int sum2 = sum;
    sums.put(sum1, true);
    sums.put(sum2, true);
    calcAllSums(arr, sum1, curIndex+1, sums);
    calcAllSums(arr, sum2, curIndex+1, sums);
}
public static void main(String[] args){
    int[] arr = {1,3,5};
    Hashtable<Integer,Boolean> sums = new Hashtable<Integer,Boolean>();
    calcAllSums(arr, 0, 0, sums);
    int i=0;
    while (sums.containsKey(i)) i++;
    System.out.println(i);
}

我计算了所有可能的和,然后迭代,直到找到一个不在列表中的整数

关于algorithm - 如何找到输入序列无法表示的最小数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7801980/

10-10 17:31