first K common elements in sorted arrays

来源:互联网 发布:king新域名 编辑:程序博客网 时间:2024/05/27 21:05

{{1, 10, 20}, {6, 7, 20, 30}, {3, 4, 15, 20, 30}}; k = 3

return 20

public static void main(String[] args) {        int[][] arr = new int[][] {{1, 10, 20}, {6, 7, 20, 30}, {3, 4, 15, 20, 30}};        FirstKCommonElements instance = new FirstKCommonElements();        int ret = instance.firstKCommonElements(arr, 3);        System.out.print(ret);    }    private int firstKCommonElements (int[][] arrays, int k) {        int n = arrays.length;        int[] pointers = new int[n];        for (int i = 0; i < n; i++) {            pointers[i] = 0;        }        for (int i = 0; i < n; i++) {            while (pointers[i] < arrays[i].length) {                int num = arrays[i][pointers[i]];//不能在index变了之后,再用index.                if (hasKCommonElements(arrays, pointers, i, k)) {                    return num;                }            }        }        return 0;    }    private boolean hasKCommonElements(int[][] arrays, int[] pointers, int idx, int k) {        int cnt = 1;        int num = arrays[idx][pointers[idx]];        pointers[idx]++;        for (int i = idx; i < pointers.length; i++) {            while (pointers[i] < arrays[i].length && arrays[i][pointers[i]] <= num) {                if (arrays[i][pointers[i]] == num) {                    cnt++;                }                pointers[i]++;            }        }        return cnt == k;    }


0 0