167.两数之和 II - 输入有序数组 - 双指针+哈希数组

Smile_slime_47

原题链接:https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/

题解

方法1:双指针
左指针和右指针从数组两边开始遍历
当和小于target时左指针++,反之右指针–

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public int[] twoSum(int[] numbers, int target) {
int leftItr=0,rightItr= numbers.length-1;
while (leftItr!=rightItr){
if(numbers[leftItr]+numbers[rightItr]==target){
break;
}else if(numbers[leftItr]+numbers[rightItr]>target){
rightItr--;
}else{
leftItr++;
}
}
int[]ans= {leftItr+1,rightItr+1};
return ans;
}
}

方法2:哈希数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public int[] twoSum(int[] numbers, int target) {
int[] map=new int[3001];
int i;
for(i=0;i<numbers.length;i++){
if(map[target-numbers[i]+1000]!=0){
break;
}
if(map[numbers[i]+1000]==0){
map[numbers[i]+1000]=i+1;
}
}
int[] ans={map[target-numbers[i]+1000],i+1};
return ans;
}
}
Comments
On this page
167.两数之和 II - 输入有序数组 - 双指针+哈希数组