Skip to content

Commit 8836835

Browse files
committed
two sum
1 parent c11f6cb commit 8836835

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

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

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// ๋ฌธ์ œ ์š”๊ตฌ์‚ฌํ•ญ -> O(n^2) ๋ณด๋‹ค ์ž‘์€ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ๊ตฌํ˜„ ํ•„์š”
2+
// ๋ฌธ์ œ๋ฅผ ๋ณด์ž๋งˆ์ž ์ƒ๊ฐ๋‚œ ๊ฒƒ -> ์ด๋ถ„ํƒ์ƒ‰ (2 ์›์†Œ ํ•ฉ์ด target ์ธ ๊ฒƒ์„ ๊ตฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ)
3+
// ์ด๋ถ„ ํƒ์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„ -> ์ •๋ ฌ(O(nlogn)) + ์ด๋ถ„ํƒ์ƒ‰ (log(n)) -> nlogn
4+
// ๊ณต๊ฐ„ ๋ณต์žก๋„ -> ๋ฐฐ์—ด ํฌ๊ธฐ ๋งŒํผ ๊ณต๊ฐ„ ํ•„์š” (n)
5+
6+
import java.util.Arrays;
7+
import java.util.HashMap;
8+
9+
class ValueIndex implements Comparable<ValueIndex> {
10+
int value;
11+
int index;
12+
13+
// ValueIndex ๊ฐ์ฒด๋ฅผ ์ •๋ ฌํ•  ๋•Œ value ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
14+
@Override
15+
public int compareTo(ValueIndex other) {
16+
return Integer.compare(this.value, other.value);
17+
}
18+
}
19+
20+
class Solution {
21+
22+
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 ์ €์žฅ
29+
}
30+
Arrays.sort(valueIndex); // ์ •๋ ฌ
31+
int left = 0;
32+
int right = nums.length - 1;
33+
34+
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 ์ด๋ฉด ๋!
44+
break;
45+
}
46+
}
47+
48+
return new int[]{valueIndex[left].index, valueIndex[right].index};
49+
}
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+
}

0 commit comments

Comments
ย (0)