LeetCode - 167. Two Sum II - Input array is sorted 两数之和 II - 输入有序数组
题目
解析
两种做法:
- 对于每一个
arr[i]
,在后面的有序数组中二分查找有没有可以匹配的,时间复杂度n * logn
; - 使用双指针,因为是有序的,所以可以通过比较大小决定哪个指针的移动,时间复杂度
n
;
class Solution {
//n * logn
public int[] twoSum(int[] numbers, int target) {
for (int i = 0; i < numbers.length; i++) {
// binary search
int L = i + 1, R = numbers.length - 1;
while (L <= R) {
int mid = L + (R - L) / 2;
if (numbers[mid] + numbers[i] == target)
return new int[]{i + 1, mid + 1};
else if (numbers[mid] + numbers[i] < target)
L = mid + 1;
else
R = mid - 1;
}
}
return null;
}
}
双指针:
class Solution {
public int[] twoSum(int[] numbers, int target) {
for (int l = 0, r = numbers.length - 1; l < r; ) {
if (numbers[l] + numbers[r] == target)
return new int[]{l + 1, r + 1};
else if (numbers[l] + numbers[r] < target)
l++;
else
r--;
}
return null;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论