File tree Expand file tree Collapse file tree 1 file changed +59
-0
lines changed
Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Original file line number Diff line number Diff line change 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+
You can’t perform that action at this time.
0 commit comments