diff --git a/course-schedule/PDKhan.cpp b/course-schedule/PDKhan.cpp new file mode 100644 index 000000000..e250c4e07 --- /dev/null +++ b/course-schedule/PDKhan.cpp @@ -0,0 +1,80 @@ +//DFS +class Solution { + public: + bool dfs(int curr, vector>& graph, vector& visited){ + if(visited[curr] == 1) + return false; + + if(visited[curr] == 2) + return true; + + visited[curr] = 1; + + for(int i = 0; i < graph[curr].size(); i++){ + if(dfs(graph[curr][i], graph, visited) == false) + return false; + } + + visited[curr] = 2; + + return true; + } + + bool canFinish(int numCourses, vector>& prerequisites) { + vector> graph (numCourses); + vector visited (numCourses, 0); + + for(int i = 0; i < prerequisites.size(); i++){ + int course = prerequisites[i][0]; + int pre = prerequisites[i][1]; + + graph[pre].push_back(course); + } + + for(int i = 0; i < numCourses; i++){ + if(dfs(i, graph, visited) == false) + return false; + } + + return true; + } + }; + +// BFS +class Solution { + public: + bool canFinish(int numCourses, vector>& prerequisites) { + vector> graph (numCourses); + vector inDegree (numCourses, 0); + + for(int i = 0; i < prerequisites.size(); i++){ + int course = prerequisites[i][0]; + int pre = prerequisites[i][1]; + + graph[pre].push_back(course); + inDegree[course]++; + } + + queue q; + + for(int i = 0; i < numCourses; i++){ + if(inDegree[i] == 0) + q.push(i); + } + + int count = 0; + + while(!q.empty()){ + int curr = q.front(); + q.pop(); + count++; + + for(int i = 0; i < graph[curr].size(); i++){ + if(--inDegree[graph[curr][i]] == 0) + q.push(graph[curr][i]); + } + } + + return count == numCourses;; + } + }; diff --git a/invert-binary-tree/PDKhan.cpp b/invert-binary-tree/PDKhan.cpp new file mode 100644 index 000000000..e8bc90b4b --- /dev/null +++ b/invert-binary-tree/PDKhan.cpp @@ -0,0 +1,14 @@ +class Solution { + public: + TreeNode* invertTree(TreeNode* root) { + if(root == NULL) + return NULL; + + TreeNode* tmp = root->left; + + root->left = invertTree(root->right); + root->right = invertTree(tmp); + + return root; + } + }; diff --git a/jump-game/PDKhan.cpp b/jump-game/PDKhan.cpp new file mode 100644 index 000000000..9cb094b87 --- /dev/null +++ b/jump-game/PDKhan.cpp @@ -0,0 +1,13 @@ +class Solution { + public: + bool canJump(vector& nums) { + int goal = nums.size() - 1; + + for(int i = nums.size() - 2; i >= 0; i--){ + if(nums[i] + i >= goal) + goal = i; + } + + return goal == 0; + } + }; diff --git a/merge-k-sorted-lists/PDKhan.cpp b/merge-k-sorted-lists/PDKhan.cpp new file mode 100644 index 000000000..a86a66e8e --- /dev/null +++ b/merge-k-sorted-lists/PDKhan.cpp @@ -0,0 +1,36 @@ +struct Compare{ + bool operator()(ListNode* a, ListNode* b){ + return a->val > b->val; + } +}; + +class Solution { +public: + ListNode* mergeKLists(vector& lists) { + priority_queue, Compare> pq; + ListNode* head = nullptr; + ListNode* tail; + + for(ListNode* node : lists){ + if(node) pq.push(node); + } + + while(!pq.empty()){ + ListNode* node = pq.top(); + + pq.pop(); + if(head == nullptr){ + head = node; + tail = head; + }else{ + tail->next = node; + tail = tail->next; + } + + if(node->next) + pq.push(node->next); + } + + return head; + } +}; diff --git a/search-in-rotated-sorted-array/PDKhan.cpp b/search-in-rotated-sorted-array/PDKhan.cpp new file mode 100644 index 000000000..01bb42bcb --- /dev/null +++ b/search-in-rotated-sorted-array/PDKhan.cpp @@ -0,0 +1,28 @@ +class Solution { + public: + int search(vector& nums, int target) { + int start = 0; + int end = nums.size() - 1; + + while(start <= end){ + int mid = start + (end - start) / 2; + + if(nums[mid] == target) + return mid; + + if(nums[start] <= nums[mid]){ + if(nums[start] <= target && nums[mid] > target) + end = mid - 1; + else + start = mid + 1; + }else{ + if(nums[mid] < target && nums[end] >= target) + start = mid + 1; + else + end = mid - 1; + } + } + + return -1; + } + };