不重复打印排序数组中相加和为给定值的所有二元组和三元组
程序员文章站
2024-01-16 11:07:58
...
【题目】给定排序数组arr和整数k,不重复打印arr中所有相加和为k的不降序二元组。例如,arr=[-8,-4,-3,0,1,2,4,5,8,9],k=10,打印结果为:
1,9
2,8
public class PrintUniquePair {
/*
* 定排序数组arr和整数k,不重复打印arr中所有相加和为k的不降序二元组
*/
public static void printTwoPair(int[] arr, int k) {
if (arr == null || arr.length < 2) {
return;
}
int left = 0;
int right = arr.length - 1;
while (left < right) {
if (arr[left] + arr[right] < k) {
left++;
} else if (arr[left] + arr[right] > k) {
right--;
} else {
if (left == 0 || arr[left] != arr[left - 1]) {
System.out.println(arr[left] + " " + arr[right]);
}
left++;
right--;
}
}
}
}
【补充题目】给定排序数组arr,和整数k,不重复打印arr中所有相加和为k的不降序三元组。
/*
* 给定排序数组arr,和整数k,不重复打印arr中所有相加和为k的不降序三元组。
*/
public static void printTrid(int[] arr, int k) {
if (arr == null || arr.length < 3) {
return;
}
for (int i = 0; i < arr.length - 2; i++) {
if (i == 0 || arr[i] != arr[i - 1]) {
isUniquePair(arr, i, i + 1, arr.length - 1, k - arr[i]);
}
}
}
public static void isUniquePair(int[] arr, int f, int l, int r, int k) {
while (l < r) {
if (arr[l] + arr[r] < k) {
l++;
} else if (arr[l] + arr[r] > k) {
r--;
} else {
if (l == f + 1 || arr[l] != arr[l - 1]) {
System.out.println(arr[f] + " " + arr[l] + " " + arr[r]);
}
l++;
r--;
}
}
}
上一篇: 微信小程序入门学习过程
下一篇: RabbitMQ 全套