1. 程式人生 > >求陣列中兩兩元素相加等於20的組合種數

求陣列中兩兩元素相加等於20的組合種數

import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        int[] data = new int[]{2, 3, 4, 4, 5, 6, 16, 18, 17, 16, 23, 24};
        Main main = new Main();
        System.out.println(main.tpyeCount(data, 20));
    }
    public int tpyeCount(int[] data, int sum) {
        Arrays.sort(data);
        int typeCount = 0;
        int begin = 0;
        int end = data.length - 1;
        while (begin < end) {
            if (data[begin] + data[end] < sum) { //此時需要begin++:
                begin++;
            } else if (data[begin] + data[end] > sum) {//此時需要end--
                end--;
            } else {//找到以後需要begin++,end--,去看還沒有相加的兩個元素。如果有相等的元素也正確
                System.out.println(data[begin] + "," + data[end]);
                begin++;
                end--;
                typeCount++;
            }
        }
        return typeCount;
    }//tpyeCount
}
//2,18
//3,17
//4,16
//4,16
//4
此時的T(n) = O(nlgn),排序可用快排是O(nlgn),後面遍歷時是O(n)
這裡不一定是20,可以是其他很多種數