File tree Expand file tree Collapse file tree 5 files changed +140
-0
lines changed
longest-consecutive-sequence Expand file tree Collapse file tree 5 files changed +140
-0
lines changed Original file line number Diff line number Diff line change
1
+ import java .util .HashSet ;
2
+ import java .util .Set ;
3
+
4
+ class Solution {
5
+ public boolean containsDuplicate (int [] nums ) {
6
+ Set <Integer > numberSet = new HashSet <>();
7
+ for (int number : nums ) {
8
+ if (numberSet .contains (number )) {
9
+ return true ;
10
+ }
11
+
12
+ numberSet .add (number );
13
+ }
14
+ return false ;
15
+ }
16
+ }
17
+
18
+ /*
19
+ class Solution {
20
+ public boolean containsDuplicate(int[] nums) {
21
+ return Arrays.stream(nums).distinct().count() != nums.length;
22
+ }
23
+ }
24
+ */
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public int rob (int [] nums ) {
3
+ int [] dp = new int [nums .length +1 ];
4
+ dp [0 ] = 0 ;
5
+ dp [1 ] = nums [0 ];
6
+
7
+ for (int i =1 ; i <nums .length ; i ++) {
8
+ dp [i +1 ] = Math .max (nums [i ] + dp [i -1 ], dp [i ]);
9
+ }
10
+
11
+ return dp [nums .length ];
12
+ }
13
+ }
Original file line number Diff line number Diff line change
1
+ import java .util .Arrays ;
2
+
3
+ class Solution {
4
+ public int longestConsecutive (int [] nums ) {
5
+ if (nums .length == 0 ) {
6
+ return 0 ;
7
+ }
8
+
9
+ Arrays .sort (nums );
10
+
11
+ int answer = 1 ;
12
+ int current = 1 ;
13
+ for (int i =1 ; i <nums .length ; i ++) {
14
+ // 이전 숫자와 같다면 스킵
15
+ if (nums [i -1 ] == nums [i ]) {
16
+ continue ;
17
+ }
18
+
19
+ // 연속된 숫자라면 증가, 아니라면 초기화
20
+ if (nums [i -1 ] + 1 == nums [i ]) {
21
+ current ++;
22
+ answer = Math .max (answer , current );
23
+
24
+ } else {
25
+ current = 1 ;
26
+ }
27
+ }
28
+
29
+ return answer ;
30
+ }
31
+ }
Original file line number Diff line number Diff line change
1
+ import java .util .Arrays ;
2
+ import java .util .HashMap ;
3
+ import java .util .Iterator ;
4
+ import java .util .Map ;
5
+
6
+ class Solution {
7
+ public int [] topKFrequent (int [] nums , int k ) {
8
+ // 배열의 숫자가 몇 번씩 등장하는지 저장
9
+ Map <Integer , Integer > frequencyMap = new HashMap <>();
10
+ for (int num : nums ) {
11
+ frequencyMap .put (num , frequencyMap .getOrDefault (num , 0 ) + 1 );
12
+ }
13
+
14
+ // Map 형식의 데이터를 [숫자, 빈도] 의 배열로 변환
15
+ Map .Entry <Integer , Integer >[] arr = new Map .Entry [frequencyMap .size ()];
16
+ Iterator <Map .Entry <Integer , Integer >> iterator = frequencyMap .entrySet ().iterator ();
17
+ for (int i =0 ; i <arr .length ; i ++) {
18
+ arr [i ] = iterator .next ();
19
+ }
20
+
21
+ // 빈도 기준 내림차순 정렬
22
+ Arrays .sort (arr , (e1 , e2 ) -> e2 .getValue () - e1 .getValue ());
23
+
24
+ // k개만 꺼내기
25
+ int [] answer = new int [k ];
26
+ for (int i =0 ; i <k ; i ++) {
27
+ answer [i ] = arr [i ].getKey ();
28
+ }
29
+
30
+ return answer ;
31
+ }
32
+ }
Original file line number Diff line number Diff line change
1
+ /*
2
+ 브루트 포스틑 이중 반복문을 사용하므로 시간 복잡도가 O(n^2)
3
+ -> map에 (값, 인덱스)로 저장 후 배열을 반복하며 합이 target인 값을 찾는다.
4
+ */
5
+ import java .util .HashMap ;
6
+ import java .util .Map ;
7
+
8
+ class Solution {
9
+ public int [] twoSum (int [] nums , int target ) {
10
+ Map <Integer , Integer > numberMap = new HashMap <>();
11
+ for (int i =0 ; i <nums .length ; i ++) {
12
+ numberMap .put (nums [i ], i );
13
+ }
14
+
15
+ for (int i =0 ; i <nums .length ; i ++) {
16
+ int operand = target - nums [i ];
17
+ if (numberMap .containsKey (operand ) && numberMap .get (operand ) != i ) { // 자기 자신은 제외
18
+ return new int [] { numberMap .get (target - nums [i ]), i };
19
+ }
20
+ }
21
+
22
+ return new int [] {};
23
+ }
24
+ }
25
+
26
+ /*
27
+ class Solution {
28
+ public int[] twoSum(int[] nums, int target) {
29
+ for (int i=0; i<nums.length-1; i++) {
30
+ for(int j=i+1; j<nums.length; j++) {
31
+ if (nums[i] + nums[j] == target) {
32
+ return new int[] { i, j };
33
+ }
34
+ }
35
+ }
36
+
37
+ return new int[] {};
38
+ }
39
+ }
40
+ */
You can’t perform that action at this time.
0 commit comments