1. Two Pointer로 풀기
- 배열은 non-decreasing order임
if => 더한게 같으면 끝
else if => 제일 작은 수와 제일 큰 수를 더했는데 큼 => 다음 큰 수
else => 제일 작은 수와 제일 큰 수를 더했는데 작음 => 다음 작은 수
int[] result = new int[2];
int i = 0;
int j = numbers.length - 1;
while(i < j) {
if(numbers[i] + numbers[j] == target){ // 같으면 끝
result[0] = i + 1;
result[1] = j + 1;
break;
} else if(numbers[i] + numbers[j] > target){
j--;
} else{
i++;
}
}
return result;
2. HashMap으로 풀기
- HashMap의 containsKey는 O(1)
- key는 중복 불가능
- 자기 자신은 제외시키기 => if(map.get(remain) != i)
class Solution {
public int[] twoSum(int[] numbers, int target) {
int[] result = new int[2];
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0; i < numbers.length; i++) {
map.put(numbers[i], i);
}
for(int i = 0; i < numbers.length; i++) {
int remain = target - numbers[i];
if(map.containsKey(remain)) {
if(map.get(remain) != i){
result[0] = i + 1;
result[1] = map.get(remain) + 1;
break;
}
}
}
return result;
}
}
'JAVA > leetcode' 카테고리의 다른 글
[LeetCode Medium] BST - Binary Search Tree Iterator (0) | 2021.08.10 |
---|---|
[LeetCode Medium] BST - Validate Binary Search Tree !! (0) | 2021.08.10 |
[LeetCode] Array Partition I (0) | 2021.08.09 |
[LeetCode] Reverse String - Two-pointer (0) | 2021.08.09 |
[LeetCode] Pascal's Triangle (0) | 2021.08.08 |