Skip to content

Commit 64df86c

Browse files
authored
Merge pull request #1180 from haung921209/main
[haung921209] WEEK 01 solutions
2 parents a505514 + 46b2884 commit 64df86c

File tree

5 files changed

+165
-0
lines changed

5 files changed

+165
-0
lines changed

contains-duplicate/haung921209.md

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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+

house-robber/haung921209.md

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
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+
+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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+

two-sum/haung921209.md

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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+

0 commit comments

Comments
 (0)