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