Skip to content

Commit 2644f06

Browse files
authored
Merge pull request #2274 from ys-han00/main
[ys-han00] WEEK 10 solutions
2 parents c942c37 + df3f9b1 commit 2644f06

5 files changed

Lines changed: 202 additions & 0 deletions

File tree

course-schedule/ys-han00.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Solution {
2+
public:
3+
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
4+
int visited = 0;
5+
vector<vector<int>> outdegree(numCourses, vector<int>());
6+
vector<int> indegree(numCourses, 0);
7+
8+
for(auto edge : prerequisites) {
9+
outdegree[edge[0]].push_back(edge[1]);
10+
indegree[edge[1]]++;
11+
}
12+
13+
queue<int> que;
14+
for(int i = 0; i < numCourses; i++) {
15+
if(indegree[i] == 0) {
16+
que.push(i);
17+
visited++;
18+
}
19+
}
20+
21+
22+
while(!que.empty()) {
23+
int now = que.front();
24+
que.pop();
25+
26+
for(auto next : outdegree[now]) {
27+
indegree[next]--;
28+
if(indegree[next] == 0) {
29+
visited++;
30+
que.push(next);
31+
}
32+
}
33+
}
34+
35+
return (visited == numCourses ? true : false);
36+
}
37+
};
38+

invert-binary-tree/ys-han00.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
8+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
9+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10+
* };
11+
*/
12+
class Solution {
13+
public:
14+
TreeNode* invertTree(TreeNode* root) {
15+
queue<TreeNode*> que;
16+
que.push(root);
17+
18+
while(!que.empty()) {
19+
TreeNode *curr = que.front();
20+
que.pop();
21+
22+
if(!curr)
23+
continue;
24+
25+
swap(curr->left, curr->right);
26+
que.push(curr->left);
27+
que.push(curr->right);
28+
}
29+
30+
return root;
31+
}
32+
};
33+

jump-game/ys-han00.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// class Solution {
2+
// public:
3+
// bool canJump(vector<int>& nums) {
4+
// int n = nums.size();
5+
// vector<bool> dp(n);
6+
7+
// dp[n - 1] = true;
8+
// for(int i = n - 2; i >= 0; i--) {
9+
// for(int j = min(n - 1, nums[i] + i); i <= j; j--) {
10+
// if(dp[j]) {
11+
// dp[i] = true;
12+
// break;
13+
// }
14+
// }
15+
// }
16+
17+
// return dp[0];
18+
// }
19+
// };
20+
21+
class Solution {
22+
public:
23+
bool canJump(vector<int>& nums) {
24+
int maxPos = 0;
25+
for(int i = 0; i < nums.size(); i++) {
26+
if(maxPos < i)
27+
return false;
28+
maxPos = max(maxPos, i + nums[i]);
29+
}
30+
31+
return true;
32+
}
33+
};
34+

merge-k-sorted-lists/ys-han00.cpp

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode() : val(0), next(nullptr) {}
7+
* ListNode(int x) : val(x), next(nullptr) {}
8+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
9+
* };
10+
*/
11+
// class Solution {
12+
// public:
13+
// ListNode* mergeKLists(vector<ListNode*>& lists) {
14+
// vector<int> nums;
15+
// for(ListNode* list : lists) {
16+
// while(list != nullptr) {
17+
// nums.push_back(list->val);
18+
// list = list->next;
19+
// }
20+
// }
21+
22+
// if(nums.size() == 0)
23+
// return nullptr;
24+
25+
// sort(nums.begin(), nums.end());
26+
// ListNode* root = new ListNode(nums[0]);
27+
// ListNode* curr = root;
28+
29+
// for(int i = 1; i < nums.size(); i++) {
30+
// curr->next = new ListNode(nums[i]);
31+
// curr = curr->next;
32+
// }
33+
34+
// return root;
35+
// }
36+
// };
37+
38+
class Solution {
39+
public:
40+
ListNode* mergeKLists(vector<ListNode*>& lists) {
41+
priority_queue<
42+
pair<int, int>,
43+
vector<pair<int, int>>,
44+
greater<pair<int, int>>
45+
> pq;
46+
47+
for(int i = 0; i < lists.size(); i++)
48+
if(lists[i])
49+
pq.push({lists[i]->val, i});
50+
51+
ListNode dummy(-1);
52+
ListNode* curr = &dummy;
53+
while(!pq.empty()) {
54+
auto [val, idx] = pq.top();
55+
pq.pop();
56+
57+
curr->next = new ListNode(val);
58+
curr = curr->next;
59+
60+
lists[idx] = lists[idx]->next;
61+
if(lists[idx])
62+
pq.push({lists[idx]->val, idx});
63+
}
64+
65+
return dummy.next;
66+
}
67+
};
68+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution {
2+
public:
3+
int search(vector<int>& nums, int target) {
4+
int left = 0, right = nums.size() - 1, mid;
5+
6+
while(left <= right) {
7+
mid = (left + right) / 2;
8+
9+
if(target == nums[mid])
10+
return mid;
11+
12+
if(nums[left] <= nums[mid]) {
13+
if(nums[left] <= target && target < nums[mid])
14+
right = mid - 1;
15+
else
16+
left = mid + 1;
17+
}
18+
else {
19+
if(nums[mid] < target && target <= nums[right])
20+
left = mid + 1;
21+
else
22+
right = mid - 1;
23+
}
24+
}
25+
26+
return -1;
27+
}
28+
};
29+

0 commit comments

Comments
 (0)