File tree Expand file tree Collapse file tree 5 files changed +165
-0
lines changed
longest-consecutive-sequence Expand file tree Collapse file tree 5 files changed +165
-0
lines changed Original file line number Diff line number Diff line change 1+
2+
3+ # cpp stl
4+ ``` cpp
5+ class Solution {
6+ public:
7+ bool containsDuplicate(vector<int >& nums) {
8+ set<int > numSet(nums.begin(), nums.end());
9+ return numSet.size() != nums.size();
10+ }
11+ };
12+ ```
13+
14+ - set으로 단순비교. 편리하나, 정렬에 비해 시간이 오래 걸림.
15+ - unordered_set을 쓰면 set 방식에서 조금 더 빠를 수는 있음
16+
17+ ```cpp
18+ class Solution {
19+ public:
20+ bool containsDuplicate(vector<int>& nums) {
21+ sort(nums.begin(), nums.end());
22+ for(int i=0;i<nums.size()-1;i++){
23+ if(nums[i]==nums[i+1]){
24+ return true;
25+ }
26+ }
27+ return false;
28+ }
29+ };
30+ ```
31+
32+ - 둘 다 O(n logn)의 시간 복잡도이나, 자료 특성 상 정렬이 더 빠름
33+
34+
35+
36+
37+
Original file line number Diff line number Diff line change 1+
2+ ``` cpp
3+ class Solution {
4+ public:
5+ int rob(vector<int >& nums) {
6+ if(nums.size()==1)
7+ return nums[ 0] ;
8+
9+ int res = max(nums[0], nums[1]);
10+ vector<int> sav(nums.size(), 0);
11+ sav[0] = nums[0];
12+ sav[1] = res;
13+ for(int i=2;i<nums.size();i++){
14+ sav[i] = max(sav[i-1], sav[i-2]+nums[i]);
15+ res = max(res, sav[i]);
16+ }
17+ return res;
18+ }
19+ };
20+ ```
21+
22+ - 1차원 dp
23+
24+
Original file line number Diff line number Diff line change 1+ ``` cpp
2+ class Solution {
3+ public:
4+ int longestConsecutive(vector<int >& nums) {
5+ if(nums.size()<=1){
6+ return nums.size();
7+ }
8+ priority_queue<int > pq(nums.begin(), nums.end());
9+ int cnt = 1;
10+ int maxCnt = 1;
11+ int before = pq.top();pq.pop();
12+ while(pq.size()>0){
13+ int cur = pq.top(); pq.pop();
14+ if(before-cur ==1){
15+ cnt++;
16+ maxCnt = max(maxCnt, cnt);
17+ }else if(before==cur){
18+ continue;
19+ }else{
20+ maxCnt = max(maxCnt, cnt);
21+ cnt=1;
22+ }
23+ before = cur;
24+ }
25+
26+ return maxCnt;
27+ }
28+ };
29+ ```
30+
31+ - 순서 유지 조건 없으므로, insert와 정렬을 동시에 할 수 있는 우선순위 큐 사용
32+ - 전체 정렬이 필요할 경우 정렬이 더 유리할 수 있으나, 최적화 여지가 우선순위 큐가 더 커서 사용
33+ - ex) 탐색 중단 조건 등
34+
35+
Original file line number Diff line number Diff line change 1+ ``` cpp
2+ class Solution {
3+ public:
4+ vector<int > topKFrequent(vector<int >& nums, int k) {
5+ unordered_map<int, int> freqCntMp;
6+ vector<vector<int >> v(nums.size()+1, vector<int >());
7+ int maxSize = 0;
8+ for(int i=0;i<nums.size();i++){
9+ freqCntMp[ nums[ i]] +=1;
10+ v[ freqCntMp[ nums[ i]]] .push_back(nums[ i] );
11+ if(maxSize<freqCntMp[ nums[ i]] )
12+ maxSize = freqCntMp[ nums[ i]] ;
13+ }
14+ for(int idx = maxSize;idx>0;idx--){
15+ if(v[ idx] .size()==k){
16+ return v[ idx] ;
17+ }
18+ }
19+ return vector<int >();
20+ }
21+ };
22+ ```
23+
Original file line number Diff line number Diff line change 1+ ## 단순 순회
2+
3+ ``` cpp
4+ class Solution {
5+ public:
6+ vector<int > twoSum(vector<int >& nums, int target) {
7+ int i=0,j=1;
8+ for(i=0;i<j;i++){
9+ for(j=i+1;j<nums.size();j++){
10+ if(nums[ i] +nums[ j] ==target){
11+ return {i, j};
12+ }
13+ }
14+ }
15+ return {0, 1};
16+
17+ }
18+ };
19+ ```
20+
21+ - O(n^2)
22+
23+ ## stl 사용
24+
25+ ``` cpp
26+ class Solution {
27+ public:
28+ vector<int > twoSum(vector<int >& nums, int target) {
29+ unordered_map<int, int> valIdxMap;
30+
31+ for(int idx=0;idx<nums.size();idx++){
32+ if(valIdxMap.find(target-nums[ idx] ) != valIdxMap.end()){
33+ return {idx, valIdxMap[ target-nums[ idx]] };
34+ }
35+ valIdxMap[ nums[ idx]] = idx;
36+
37+ }
38+ return {0, 1};
39+
40+ }
41+ };
42+ ```
43+
44+ - O(nlogn)
45+
46+
You can’t perform that action at this time.
0 commit comments