{{1, 10, 20}, {6, 7, 20, 30}, {3, 4, 15, 20, 30}}; k = 3
return 20public 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;
}

本文介绍了一个算法问题的解决方案:在一个二维整数数组中寻找前K个公共元素。通过迭代每个数组并检查是否有K个相同的元素来实现。如果找到这样的元素,则立即返回。

557

被折叠的 条评论
为什么被折叠?



