Skip to content

Commit 6d683bc

Browse files
committed
Add two sum
1 parent 6ea64c6 commit 6d683bc

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

two-sum/sangyyypark.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/**
2+
* 1 .문제 정의
3+
* 배열이 주어지면, 배열에 포함된 정수가 중복이 없다면 fasle, 적어도 1회 이상 중복이 있다면 true를 반환해야한다.
4+
* 배열의 크기는?
5+
* - 1 <= length <= 100000
6+
* 2. naive algorithm 도출
7+
* - 배열을 탐색하면서 Set자료구조에 넣는다. 이때 Set에 넣으려는 값이 이미 포함되어있는지를 확인합니다.. true를 반환.
8+
* - 배열 전체를 탐색했는데 포함여부에서 걸리지 않으면 false를 반환
9+
* 3. 시간&공간복잡도 분석
10+
* - 배열의 길이가 N이면 O(N)의 시간 복잡도
11+
* 4. 코드작성
12+
*/
13+
import java.util.*;
14+
15+
/**
16+
* 1 .문제 정의
17+
* 배열에서 동일한 숫자를 사용하지 않고 두개의 숫자를 선택해서 합이 target이 나오는지 판별해야 하는 문제
18+
* - 배열의 길이는?
19+
* - 2 <= length <= 10000 라고 가정합니다.
20+
* - target을 만드는 경우가 여러개가 있다면?
21+
* - 오직 하나의 경우만 있다고 가정합니다.
22+
* 2. naive algorithm 도출
23+
* - 투포인터 알고리즘을 사용해서 구현
24+
* - left,right를 각각 선정합니다.
25+
* - left와 right가 같으면 합을 구하지 않고 Right를 1칸 전진합니다.
26+
* - left와 right의 합을 구해서 target이 아니라면 right를 1칸 전진합니다.
27+
* - right가 마지막에 도달했는데도 target이 아니라면 left를 1칸 전진합니다.
28+
* - 위 과정을 반복합니다.
29+
* 3. 시간&공간복잡도 분석
30+
* - 투포인터 알고리즘의 시간복잡도는 O(N^2)
31+
* 4. 코드작성
32+
*/
33+
public class sangyyypark {
34+
public int[] twoSum(int[] nums, int target) {
35+
int left = 0;
36+
int right = 1;
37+
int [] answer = new int [2];
38+
while(left < nums.length && right < nums.length) {
39+
int a = nums[left];
40+
int b = nums[right];
41+
if(target == a + b) {
42+
answer[0] = left;
43+
answer[1] = right;
44+
break;
45+
}
46+
47+
48+
if(right >= nums.length -1) {
49+
left++;
50+
right = left+1;
51+
}
52+
else {
53+
right++;
54+
}
55+
}
56+
return answer;
57+
}
58+
}
59+

0 commit comments

Comments
 (0)