Skip to content

Commit 8a64ba6

Browse files
committed
2019-07-25
1 parent 4c81607 commit 8a64ba6

File tree

6 files changed

+216
-24
lines changed

6 files changed

+216
-24
lines changed

0207.课程表/0207-课程表.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
class Solution(object):
2+
def canFinish(self, numCourses, prerequisites):
3+
"""
4+
:type numCourses: int
5+
:type prerequisites: List[List[int]]
6+
:rtype: bool
7+
"""
8+
from collections import deque
9+
if not prerequisites: #没有前置课的要求
10+
return True
11+
12+
indegree = [0 for _ in range(numCourses)]
13+
adj = [set() for _ in range(numCourses)]
14+
15+
for end, start in prerequisites:
16+
indegree[end] += 1
17+
adj[start].add(end)
18+
19+
queue = deque()
20+
for i, x in enumerate(indegree):
21+
if not x: #入度为0的结点入队
22+
queue.append(i)
23+
24+
cnt = 0
25+
while queue:
26+
cur = queue.popleft()
27+
cnt += 1 #当前的cur满足条件
28+
29+
for neighbor in adj[cur]:
30+
indegree[neighbor] -= 1
31+
if not indegree[neighbor]:
32+
queue.append(neighbor)
33+
34+
return cnt == numCourses
35+

0208.实现Trie(前缀树)/0208-实现Trie(前缀树).py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ def __init__(self):
55
Initialize your data structure here.
66
"""
77
self.root = {}
8-
98

109
def insert(self, word):
1110
"""
@@ -16,10 +15,8 @@ def insert(self, word):
1615
node = self.root
1716
for char in word:
1817
node = node.setdefault(char, {})
19-
20-
node["end"] = True
2118

22-
19+
node["end"] = True
2320

2421
def search(self, word):
2522
"""
@@ -32,9 +29,7 @@ def search(self, word):
3229
if char not in node:
3330
return False
3431
node = node[char]
35-
3632
return "end" in node
37-
3833

3934
def startsWith(self, prefix):
4035
"""
@@ -47,7 +42,6 @@ def startsWith(self, prefix):
4742
if char not in node:
4843
return False
4944
node = node[char]
50-
5145
return True
5246

5347

0209.长度最小的子数组/0209-长度最小的子数组.py

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,20 @@ def minSubArrayLen(self, s, nums):
77
"""
88
if not nums:
99
return 0
10-
res = len(nums) + 1
11-
lo, hi = 0, -1
12-
subsum = 0
13-
while(lo < len(nums)):
14-
15-
if subsum < s and hi + 1 < len(nums):
16-
hi += 1
17-
subsum += nums[hi]
18-
else:
19-
subsum -= nums[lo]
20-
lo += 1
21-
22-
if subsum >= s:
23-
res = min(res, hi - lo + 1)
24-
25-
return res if res != len(nums) + 1 else 0
26-
2710

11+
left, right = 0, 0
12+
interval_sum = nums[0]
13+
res = 1 << 31
14+
while right < len(nums) and left <= right:
15+
# print nums[left:right + 1], interval_sum, left, right
16+
if interval_sum < s:
17+
right += 1 #需要更多的数,向右拓展
18+
if right < len(nums):
19+
interval_sum += nums[right]
20+
else:
21+
res = min(res, right - left + 1)
22+
interval_sum -= nums[left]
23+
left += 1 #满足条件,试着缩小区间
24+
# res = min(res, right - left + 1)
25+
return res if res != 1 <<31 else 0
2826

0210.课程表II/0210-课程表II.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
class Solution(object):
2+
def findOrder(self, numCourses, prerequisites):
3+
"""
4+
:type numCourses: int
5+
:type prerequisites: List[List[int]]
6+
:rtype: List[int]
7+
"""
8+
if not prerequisites:
9+
return [i for i in range(numCourses)]
10+
11+
indegree = [0 for _ in range(numCourses)]
12+
adj = [set() for _ in range(numCourses)]
13+
14+
for end, start in prerequisites:
15+
indegree[end] += 1
16+
adj[start].add(end)
17+
18+
from collections import deque
19+
queue = deque()
20+
21+
for i, x in enumerate(indegree):
22+
if not x:
23+
queue.append(i)
24+
25+
res = []
26+
while queue:
27+
cur = queue.popleft()
28+
res.append(cur)
29+
30+
for neighbor in adj[cur]:
31+
indegree[neighbor] -= 1
32+
if indegree[neighbor] == 0:
33+
queue.append(neighbor)
34+
35+
return res if len(res) == numCourses else []
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
class WordDictionary(object):
2+
3+
def __init__(self):
4+
"""
5+
Initialize your data structure here.
6+
"""
7+
self.roots = {}
8+
9+
def addWord(self, word):
10+
"""
11+
Adds a word into the data structure.
12+
:type word: str
13+
:rtype: None
14+
"""
15+
print word
16+
node = self.roots
17+
for char in word:
18+
node = node.setdefault(char, {})
19+
node["end"] = True
20+
21+
def search(self, word):
22+
"""
23+
Returns if the word is in the data structure. A word could contain the dot character '.' to represent any one letter.
24+
:type word: str
25+
:rtype: bool
26+
"""
27+
self.res = False
28+
self.searchHelper(self.roots, word)
29+
return self.res
30+
31+
def searchHelper(self, dic, word):
32+
if not word:
33+
self.res |= "end" in dic
34+
return
35+
node = dic
36+
i, char = 0, word[0]
37+
if char == ".":#ȫƥÅä
38+
for x in "abcedfghijklmnopqrstuvwxyz":
39+
if x in node:
40+
self.searchHelper(node[x], word[1:])
41+
elif char in node:
42+
self.searchHelper(node[char], word[1:])
43+
# Your WordDictionary object will be instantiated and called as such:
44+
# obj = WordDictionary()
45+
# obj.addWord(word)
46+
# param_2 = obj.search(word)
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
class Trie(object):
2+
def __init__(self):
3+
"""
4+
Initialize your data structure here.
5+
"""
6+
self.root = {}
7+
8+
def insert(self, word):
9+
"""
10+
Inserts a word into the trie.
11+
:type word: str
12+
:rtype: None
13+
"""
14+
node = self.root
15+
for char in word:
16+
node = node.setdefault(char, {})
17+
18+
node["end"] = True
19+
20+
def search(self, word):
21+
"""
22+
Returns if the word is in the trie.
23+
:type word: str
24+
:rtype: bool
25+
"""
26+
node = self.root
27+
for char in word:
28+
if char not in node:
29+
return False
30+
node = node[char]
31+
return "end" in node
32+
33+
def startsWith(self, prefix):
34+
"""
35+
Returns if there is any word in the trie that starts with the given prefix.
36+
:type prefix: str
37+
:rtype: bool
38+
"""
39+
node = self.root
40+
for char in prefix:
41+
if char not in node:
42+
return False
43+
node = node[char]
44+
return True
45+
46+
class Solution(object):
47+
def findWords(self, board, words):
48+
"""
49+
:type board: List[List[str]]
50+
:type words: List[str]
51+
:rtype: List[str]
52+
"""
53+
if not board or not board[0]:
54+
return []
55+
m, n = len(board), len(board[0])
56+
dx = [1, -1, 0, 0]
57+
dy = [0, 0, 1, -1]
58+
tree = Trie()
59+
for word in words:
60+
tree.insert(word)
61+
words = set(words)
62+
res = set()
63+
def dfs(x0, y0, node, tmpword):
64+
visited.add((x0, y0))
65+
# print tmpword, x0, y0
66+
for k in range(4):
67+
x = x0 + dx[k]
68+
y = y0 + dy[k]
69+
70+
if 0 <= x < m and 0 <= y < n and board[x][y] in node and (x, y) not in visited:
71+
visited.add((x, y))
72+
dfs(x, y, node[board[x][y]], tmpword + board[x][y])
73+
visited.remove((x,y))
74+
75+
if tmpword in words:
76+
res.add(tmpword)
77+
78+
for i in range(m):
79+
for j in range(n):
80+
if board[i][j] in tree.root:
81+
visited = set((i,j))
82+
dfs(i, j, tree.root[board[i][j]], board[i][j])
83+
return list(res)
84+

0 commit comments

Comments
 (0)