求陣列中兩兩元素相加等於20的組合種數
阿新 • • 發佈:2019-01-09
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,可以是其他很多種數