File tree Expand file tree Collapse file tree 5 files changed +126
-0
lines changed
longest-consecutive-sequence Expand file tree Collapse file tree 5 files changed +126
-0
lines changed Original file line number Diff line number Diff line change 1+ import java .util .*;
2+ /* 시간 복잡도: O(N), nums.length를 n이라고 할 때, 시간 복잡도는 O(N)
3+ * HashSet
4+ * - contains: O(1)
5+ * - add: O(1)
6+ *
7+ * 공간 복잡도: O(N), Set에 최대 n개의 요소를 저장할 수 있음
8+ */
9+ class Solution {
10+ public boolean containsDuplicate (int [] nums ) {
11+ Set <Integer > set = new HashSet <>();
12+ for (int num : nums ) {
13+ if (set .contains (num )) return true ;
14+ set .add (num );
15+ }
16+ return false ;
17+ }
18+ }
Original file line number Diff line number Diff line change 1+ class Solution {
2+ /* 시간 복잡도: O(N)
3+ * - for 루프: O(N)
4+ * 공간 복잡도: O(N), dp배열
5+ */
6+ public int rob (int [] nums ) {
7+ int n = nums .length ;
8+ int [] dp = new int [n ];
9+ dp [0 ] = nums [0 ];
10+ if (n > 1 ) dp [1 ] = Math .max (nums [0 ], nums [1 ]);
11+ for (int i = 2 ; i < n ; i ++) {
12+ dp [i ] = Math .max (dp [i - 2 ] + nums [i ], dp [i - 1 ]);
13+ }
14+
15+ return dp [n - 1 ];
16+ }
17+ }
18+
Original file line number Diff line number Diff line change 1+ import java .util .*;
2+
3+ class Solution {
4+ /* 시간 복잡도: O(N)
5+ * - for 루프: O(N) O(N)
6+ * - HashSet(add, contains): O(1)
7+ *
8+ * 공간 복잡도: O(N), HashSet에 n개
9+ */
10+ public int longestConsecutive (int [] nums ) {
11+ Set <Integer > set = new HashSet <>();
12+ for (int num : nums ) {
13+ set .add (num );
14+ }
15+
16+ int answer = 0 ;
17+ for (int num : set ) {
18+ if (!set .contains (num - 1 )) {
19+ int cur = num ;
20+ int count = 1 ;
21+ while (set .contains (cur + 1 )) {
22+ cur += 1 ;
23+ count += 1 ;
24+ }
25+ answer = Math .max (answer , count );
26+ }
27+ }
28+
29+ return answer ;
30+ }
31+ }
32+
Original file line number Diff line number Diff line change 1+ import java .util .*;
2+
3+
4+ class Solution {
5+ /* 시간 복잡도: O(N + M * log k)
6+ * - for 루프: O(N), frequency 구하기
7+ * - for 루프: O(M * log k), Map 순회
8+ - Map 요소: M개
9+ * - PriorityQueue 연산 (offer, poll): 평균 O(logk)
10+ *
11+ * 공간 복잡도: O(N + k), HashMap에 n개 + PriorityQueue에 k개
12+ */
13+ public int [] topKFrequent (int [] nums , int k ) {
14+ Map <Integer , Integer > frequencyMap = new HashMap <>();
15+ // [num, frequency]
16+ PriorityQueue <int []> minHeap = new PriorityQueue <>((o1 , o2 ) -> {
17+ return o1 [1 ] - o2 [1 ];
18+ });
19+ for (int num : nums ) {
20+ frequencyMap .put (num , frequencyMap .getOrDefault (num , 0 ) + 1 );
21+ }
22+ for (var entry : frequencyMap .entrySet ()) {
23+ minHeap .add (new int []{entry .getKey (), entry .getValue ()});
24+ if (minHeap .size () > k ) {
25+ minHeap .poll ();
26+ }
27+ }
28+
29+ int [] answer = new int [k ];
30+ for (int i = 0 ; i < k ; i ++) {
31+ answer [i ] = minHeap .poll ()[0 ];
32+ }
33+ return answer ;
34+ }
35+ }
36+
Original file line number Diff line number Diff line change 1+ import java .util .*;
2+
3+ class Solution {
4+ /* 시간 복잡도: O(N), nums.length를 n이라고 할 때, 시간 복잡도는 O(N)
5+ * - for 루프: O(N)
6+ * - HashMap 연산 (containsKey, put): 평균 O(1)
7+ *
8+ * 공간 복잡도: O(N), HashMap에 최대 n개의 요소를 저장할 수 있음
9+ */
10+ public int [] twoSum (int [] nums , int target ) {
11+ Map <Integer , Integer > numToIndex = new HashMap <>();
12+ for (int i = 0 ; i < nums .length ; i ++) {
13+ int remains = target - nums [i ];
14+ if (numToIndex .containsKey (remains )) {
15+ return new int []{i , numToIndex .get (remains )};
16+ }
17+ numToIndex .put (nums [i ], i );
18+ }
19+ return null ;
20+ }
21+ }
22+
You can’t perform that action at this time.
0 commit comments