在子列表Java的总和中搜索特定数字

时间:2016-02-03 14:14:32

标签: java list arraylist

我想知道如果我们添加列表的元素,如何搜索数字,例如T。 例如,如果我有一个列表L = [1,5,-2,6]和T = 3,则存在T.

列表中有20到30个元素,任何想法?

1 个答案:

答案 0 :(得分:0)

好吧,如果有人想知道有一天我发现了什么:

final nt TAB_SIZE = 30;

int[] tab = new int[TAB_SIZE];
for(int i = 0; i < TAB_SIZE; i++){
    tab[i] = i;
}
int T = -1;
int n = tab.length;

if (isSubsetSum(tab, n, T))
    System.out.println("Found");
else
    System.out.println("Not found");


public boolean isSubsetSum(int tab[], int n, int T){
    if (T == 0)
        return true;
    if (n == 0) //So T !=0
        return false;
        //If the last element is higher, we ignore it
    if (tab[n-1] > T)
        return isSubsetSum(tab, n-1, T);

    //Otherwise, looking if the sum can be obtain bith adding ou excluding the last element
    return isSubsetSum(tab, n-1, T) || isSubsetSum(tab, n-1, T-tab[n-1]);
}

此算法非常快,但仅适用于正值