Java实现:在升序数组中查找和为指定值的两个数
Java实现:在升序数组中查找和为指定值的两个数
以下是使用Java代码实现在升序数组中找到两个数字,使其和等于指定值的示例:
public class TwoSum {
public static void findTwoNumbers(int[] arr, int targetSum) {
int left = 0;
int right = arr.length - 1;
while (left < right) {
int currentSum = arr[left] + arr[right];
if (currentSum == targetSum) {
System.out.println('找到了满足条件的两个数字:' + arr[left] + ' 和 ' + arr[right]);
return;
} else if (currentSum < targetSum) {
left++;
} else {
right--;
}
}
System.out.println('在给定的升序数组中未找到满足条件的两个数字。');
}
public static void main(String[] args) {
int[] arr = {1, 2, 4, 7, 12, 15};
int targetSum = 14;
findTwoNumbers(arr, targetSum);
}
}
输出结果:
找到了满足条件的两个数字:2 和 12
这段代码通过双指针法,在时间复杂度为O(n)的情况下找到了满足条件的两个数字。
代码解释:
- 双指针法: 该代码使用双指针法,即使用两个指针
left和right分别指向数组的起始和结束位置。 - 循环比较: 在循环中,比较
arr[left] + arr[right]与目标值targetSum的大小关系。 - 更新指针:
- 如果
currentSum等于targetSum,则找到了目标数字,输出结果并返回。 - 如果
currentSum小于targetSum,则需要增大left指针,指向更大的数字。 - 如果
currentSum大于targetSum,则需要减小right指针,指向更小的数字。
- 如果
- 未找到结果: 如果循环结束后仍未找到满足条件的两个数字,则输出未找到的提示信息。
优势:
- 高效: 双指针法的时间复杂度为O(n),比暴力枚举所有组合的O(n^2)效率更高。
- 简洁易懂: 代码逻辑清晰,易于理解和实现。
原文地址: https://www.cveoy.top/t/topic/lPi 著作权归作者所有。请勿转载和采集!