求数组中两两元素相加等于20的组合种数

来源:互联网 发布:qq邮箱smtp端口号 编辑:程序博客网 时间:2024/06/05 18:08

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,可以是其他很多种数





阅读全文
0 0
原创粉丝点击