File tree Expand file tree Collapse file tree 5 files changed +106
-0
lines changed
longest-consecutive-sequence Expand file tree Collapse file tree 5 files changed +106
-0
lines changed Original file line number Diff line number Diff line change 1+ class Solution {
2+ /**
3+ * 시간 복잡도: O(N)
4+ * 공간 복잡도: O(N)
5+ */
6+ public boolean containsDuplicate (int [] nums ) {
7+ Set <Integer > set = new HashSet <>();
8+
9+ for (int num : nums ) {
10+ if (set .contains (num )) return true ;
11+ set .add (num );
12+ }
13+
14+ return false ;
15+ }
16+ }
Original file line number Diff line number Diff line change 1+ class Solution {
2+ public int rob (int [] nums ) {
3+ //배열 길이 0이면 털 수 있는 집이 없음.
4+ if (nums .length == 0 ) return 0 ;
5+ //배열 길이가 1이면 한 집만 털 수 있음.
6+ if (nums .length == 1 ) return nums [0 ];
7+
8+ //동적 계획법으로 풀이
9+ int [] dp = new int [nums .length ];
10+ dp [0 ] = nums [0 ];
11+ dp [1 ] = Math .max (nums [0 ], nums [1 ]);
12+
13+ //배열 크기가 2이상일 경우 최대 금액의 범위 확장
14+ for (int i = 2 ; i < nums .length ; i ++) {
15+ dp [i ] = Math .max (dp [i - 2 ] + nums [i ], dp [i - 1 ]);
16+ }
17+ return dp [nums .length - 1 ];
18+ }
19+ }
Original file line number Diff line number Diff line change 1+ import java .util .*;
2+
3+ class Solution {
4+ public int longestConsecutive (int [] nums ) {
5+ if (nums == null || nums .length == 0 ) return 0 ;
6+
7+ //모든 요소 HashSet 삽입
8+ HashSet <Integer > set = new HashSet <>();
9+ for (int num : nums ) {
10+ set .add (num );
11+ }
12+
13+ int longest = 0 ;
14+
15+ // 시작지점 체크
16+ for (int num : nums ) {
17+ //배열 요소보다 1 작은 수 가 없는 경우 새로운 시작 지점이 됨
18+ if (!set .contains (num - 1 )) {
19+ int start = num ;
20+ int currentLength = 1 ;
21+
22+ // 1씩 증가시키면서 연속된 수의 개수 탐색
23+ while (set .contains (start + 1 )) {
24+ start ++;
25+ currentLength ++;
26+ }
27+ // 기존 longest와 현재 연속된 수를 비교
28+ longest = Math .max (longest , currentLength );
29+ }
30+ }
31+
32+ return longest ;
33+ }
34+ }
Original file line number Diff line number Diff line change 1+ import java .util .*;
2+
3+ class Solution {
4+ public int [] topKFrequent (int [] nums , int k ) {
5+ Map <Integer , Integer > map = new HashMap <>();
6+ for (int num : nums ) {
7+ map .put (num , map .getOrDefault (num , 0 ) + 1 );
8+ }
9+
10+ //value값을 통한 key 정렬
11+ List <Integer > list = new ArrayList <>(map .keySet ());
12+ list .sort ((a ,b )->map .get (b ) - map .get (a ));
13+
14+ //상위 k개 key 추출
15+ int [] res = new int [k ];
16+ for (int i = 0 ; i < k ; i ++) {
17+ res [i ] = list .get (i );
18+ }
19+ return res ;
20+ }
21+ }
Original file line number Diff line number Diff line change 1+ class Solution {
2+ public boolean isPalindrome (String s ) {
3+ //정규식으로 영문,숫자 아닌 경우 "" 치환
4+ //StringBuilder를 통해 문자열 가공
5+ //거꾸로 뒤집은 것과 원래의 문자열이 일치할 경우 팰린드롬
6+ s = s .replaceAll ("[^a-zA-Z0-9]" , "" ).toLowerCase ();
7+ StringBuilder sb = new StringBuilder (s );
8+ if (sb .reverse ().toString ().equals (s )){
9+ return true ;
10+ }
11+
12+ return false ;
13+ }
14+ }
15+
16+
You can’t perform that action at this time.
0 commit comments