Skip to content

Commit 3502dd4

Browse files
committed
two sum
1 parent 8b8188b commit 3502dd4

File tree

1 file changed

+25
-64
lines changed

1 file changed

+25
-64
lines changed

โ€Žtwo-sum/eunhwa99.javaโ€Ž

Lines changed: 25 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,41 @@
1-
// ๋ฌธ์ œ ์š”๊ตฌ์‚ฌํ•ญ -> O(n^2) ๋ณด๋‹ค ์ž‘์€ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ๊ตฌํ˜„ ํ•„์š”
2-
// ๋ฌธ์ œ๋ฅผ ๋ณด์ž๋งˆ์ž ์ƒ๊ฐ๋‚œ ๊ฒƒ -> ์ด๋ถ„ํƒ์ƒ‰ (2 ์›์†Œ ํ•ฉ์ด target ์ธ ๊ฒƒ์„ ๊ตฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ)
3-
// ์ด๋ถ„ ํƒ์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„ -> ์ •๋ ฌ(O(nlogn)) + ์ด๋ถ„ํƒ์ƒ‰ (log(n)) -> nlogn
4-
// ๊ณต๊ฐ„ ๋ณต์žก๋„ -> ๋ฐฐ์—ด ํฌ๊ธฐ ๋งŒํผ ๊ณต๊ฐ„ ํ•„์š” (n)
1+
// two pointer
52

63
import java.util.Arrays;
7-
import java.util.HashMap;
4+
import java.util.Comparator;
85

9-
class ValueIndex implements Comparable<ValueIndex> {
10-
int value;
6+
class Point {
117
int index;
8+
int value;
9+
Point(int index, int value){
10+
this.index = index;
11+
this.value = value;}
1212

13-
// ValueIndex ๊ฐ์ฒด๋ฅผ ์ •๋ ฌํ•  ๋•Œ value ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
14-
@Override
15-
public int compareTo(ValueIndex other) {
16-
return Integer.compare(this.value, other.value);
17-
}
1813
}
1914

20-
class Solution {
21-
15+
// ์‹œ๊ฐ„ ๋ณต์žก๋„: O(nlogn) - ์ •๋ ฌ
16+
// ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n) - Point ๊ฐ์ฒด ๋ฐฐ์—ด
17+
class Solution{
2218
public int[] twoSum(int[] nums, int target) {
23-
int size = nums.length;
24-
ValueIndex[] valueIndex = new ValueIndex[size];
25-
for (int i = 0; i < size; ++i) {
26-
valueIndex[i] = new ValueIndex();
27-
valueIndex[i].value = nums[i];
28-
valueIndex[i].index = i; // ์ •๋ ฌ ์ „ original index ์ €์žฅ
19+
Point[] points = new Point[nums.length];
20+
for(int i = 0; i < nums.length; i++){
21+
points[i] = new Point(i, nums[i]);
2922
}
30-
Arrays.sort(valueIndex); // ์ •๋ ฌ
23+
Arrays.sort(points, Comparator.comparingInt(p -> p.value));
24+
int[] result = new int[2];
3125
int left = 0;
3226
int right = nums.length - 1;
33-
3427
while (left < right) {
35-
int leftVal = valueIndex[left].value;
36-
int rightVal = valueIndex[right].value;
37-
int sum = leftVal + rightVal;
38-
39-
if (sum < target) { // target ๋ณด๋‹ค ํ•ฉ์ด ์ž‘์œผ๋ฉด, left ๊ฐ’์ด ์ปค์ ธ์•ผ ํ•จ
40-
left += 1;
41-
} else if (sum > target) {
42-
right -= 1; // target ๋ณด๋‹ค ํ•ฉ์ด ํฌ๋ฉด, right ๊ฐ’์ด ์ž‘์•„์ ธ์•ผ ํ•จ
43-
} else { // sum = target ์ด๋ฉด ๋!
28+
int sum = points[left].value + points[right].value;
29+
if (sum == target) {
30+
result[0] = points[left].index;
31+
result[1] = points[right].index;
4432
break;
33+
} else if (sum < target) {
34+
left++;
35+
} else {
36+
right--;
4537
}
4638
}
47-
48-
return new int[]{valueIndex[left].index, valueIndex[right].index};
39+
return result;
4940
}
50-
}
51-
52-
53-
/**
54-
* hashMap์„ ์ด์šฉํ•œ O(n) ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค๊ณ  ํ•ด์„œ ์ถ”๊ฐ€ ๊ตฌํ˜„ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. (์‹œ๊ฐ„/๊ณต๊ฐ„ ๋ณต์žก๋„ O(n))
55-
*/
56-
57-
class Solution {
58-
59-
public int[] twoSum(int[] nums, int target) {
60-
HashMap<Integer, Integer> numMap = new HashMap<>();
61-
int left = 0, right = 0;
62-
for (int i = 0; i < nums.length; i++) {
63-
int complement = target - nums[i]; // ํ˜„์žฌ ์ˆซ์ž์™€ ํ•ฉ์ณ์„œ target์„ ๋งŒ๋“œ๋Š” ์ˆซ์ž
64-
65-
// ์ด๋ฏธ ๊ทธ ์ˆซ์ž๊ฐ€ ํ•ด์‹œ๋งต์— ์žˆ๋‹ค๋ฉด, ๋‘ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜
66-
if (numMap.containsKey(complement)) {
67-
left = numMap.get(complement);
68-
right = i;
69-
break;
70-
}
71-
72-
// ํ•ด์‹œ๋งต์— ํ˜„์žฌ ์ˆซ์ž์™€ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€
73-
numMap.put(nums[i], i);
74-
}
75-
76-
return new int[]{left, right};
77-
78-
}
79-
}
80-
41+
}

0 commit comments

Comments
ย (0)