Skip to content

Commit 28fe57e

Browse files
committed
solve 4 problems
1 parent f6bf5d4 commit 28fe57e

File tree

5 files changed

+142
-0
lines changed

5 files changed

+142
-0
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,10 @@ Golang solution for leetcode. For each problem, there is a simple *_test.go to t
167167
#### [206. Reverse Linked List](https://github.com/hitzzc/go-leetcode/tree/master/reverse_linked_list)
168168
#### [207. Course Schedule](https://github.com/hitzzc/go-leetcode/tree/master/course_schedule)
169169
#### [208. Implement Trie (Prefix Tree)](https://github.com/hitzzc/go-leetcode/tree/master/implement_trie)
170+
#### [209. Minimum Size Subarray Sum](https://github.com/hitzzc/go-leetcode/tree/master/minimum_size_subarray_sum)
171+
#### [210. Course Schedule II](https://github.com/hitzzc/go-leetcode/tree/master/course_schedule_II)
172+
#### [211. Add and Search Word - Data structure design](https://github.com/hitzzc/go-leetcode/tree/master/add_and_search_word)
173+
#### [213. House Robber II](https://github.com/hitzzc/go-leetcode/tree/master/add_and_search_word)
170174

171175

172176

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#include <unordered_map>
2+
using namespace std;
3+
4+
struct TrieNode {
5+
bool is_word_;
6+
unordered_map<char, TrieNode*> children;
7+
TrieNode(): is_word_(false) {}
8+
};
9+
10+
class WordDictionary {
11+
public:
12+
TrieNode* root;
13+
WordDictionary() {
14+
root = new TrieNode();
15+
}
16+
// Adds a word into the data structure.
17+
void addWord(string word) {
18+
if (word.size() <= 0) return;
19+
TrieNode* node = root;
20+
for (int i = 0; i < word.size(); ++i){
21+
if (node->children.find(word[i]) == node->children.end()){
22+
node->children[word[i]] = new TrieNode();
23+
}
24+
node = node->children[word[i]];
25+
}
26+
node->is_word_ = true;
27+
}
28+
29+
// Returns if the word is in the data structure. A word could
30+
// contain the dot character '.' to represent any one letter.
31+
bool search(string word) {
32+
return retrieve(word, root, 0, word.size());
33+
}
34+
35+
bool retrieve(string& word, TrieNode* node, int idx, int length) {
36+
if (idx == length) return node->is_word_;
37+
if (word[idx] == '.') {
38+
if (node->children.size() == 0) {
39+
return false;
40+
}
41+
for (auto& kv: node->children) {
42+
if (retrieve(word, kv.second, idx+1, length)) {
43+
return true;
44+
}
45+
}
46+
return false;
47+
}else if (node->children.find(word[idx]) != node->children.end()) {
48+
return retrieve(word, node->children[word[idx]], idx+1, length);
49+
}
50+
return false;
51+
}
52+
};
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package course_schedule_II
2+
3+
func findOrder(numCourses int, prerequisites [][]int) []int {
4+
graph := map[int][]int{}
5+
inDegree := make([]int, numCourses)
6+
for i := range prerequisites {
7+
graph[prerequisites[i][1]] = append(graph[prerequisites[i][1]], prerequisites[i][0])
8+
inDegree[prerequisites[i][0]]++
9+
}
10+
queue := []int{}
11+
for i := range inDegree {
12+
if inDegree[i] == 0 {
13+
queue = append(queue, i)
14+
}
15+
}
16+
ret := []int{}
17+
for len(queue) != 0 {
18+
head := queue[0]
19+
queue = queue[1:]
20+
for i := range graph[head] {
21+
inDegree[graph[head][i]]--
22+
if inDegree[graph[head][i]] == 0 {
23+
queue = append(queue, graph[head][i])
24+
}
25+
}
26+
ret = append(ret, head)
27+
}
28+
if len(ret) != numCourses {
29+
return []int{}
30+
}
31+
return ret
32+
}

house_robber_II/house_robber_II.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package house_robber_II
2+
3+
func rob(nums []int) int {
4+
if len(nums) == 0 {
5+
return 0
6+
}
7+
if len(nums) == 1 {
8+
return nums[0]
9+
}
10+
if len(nums) == 2 {
11+
return max(nums[0], nums[1])
12+
}
13+
x := helper(nums, 0, len(nums)-2)
14+
y := helper(nums, 1, len(nums)-1)
15+
return max(x, y)
16+
}
17+
18+
func helper(nums []int, i, j int) int {
19+
var n1, n2, current int
20+
for ; i <= j; i++ {
21+
current = max(n1, n2+nums[i])
22+
n2 = n1
23+
n1 = current
24+
}
25+
return n1
26+
}
27+
28+
func max(i, j int) int {
29+
if i > j {
30+
return i
31+
}
32+
return j
33+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package minimum_size_subarray_sum
2+
3+
func minSubArrayLen(s int, nums []int) int {
4+
var left, right, res int
5+
min := len(nums) + 1
6+
for right < len(nums) {
7+
for ; res < s && right < len(nums); right++ {
8+
res += nums[right]
9+
}
10+
for ; res >= s; left++ {
11+
res -= nums[left]
12+
if right-left < min {
13+
min = right - left
14+
}
15+
}
16+
}
17+
if min == len(nums)+1 {
18+
return 0
19+
}
20+
return min
21+
}

0 commit comments

Comments
 (0)