diff --git a/Week_02/id_15/LeetCode_1_015.py b/Week_02/id_15/LeetCode_1_015.py new file mode 100644 index 00000000..ee5d6dd2 --- /dev/null +++ b/Week_02/id_15/LeetCode_1_015.py @@ -0,0 +1,7 @@ +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + d={} + for i,num in enumerate(nums): + if target-num in d: + return d[target-num], i + d[num]=i diff --git a/Week_02/id_15/LeetCode_242_015.py b/Week_02/id_15/LeetCode_242_015.py new file mode 100644 index 00000000..b89088ca --- /dev/null +++ b/Week_02/id_15/LeetCode_242_015.py @@ -0,0 +1,14 @@ +class Solution: + def isAnagram(self, s: str, t: str) -> bool: + if s =="" and t == "": + return True + + if len(s) != len(t) or len(set(s)) != len(set(t)): + return False + + for char in set(s): + s_count = s.count(char) + t_count = t.count(char) + if s_count != t_count: + return False + return True diff --git a/Week_02/id_15/LeetCode_3_015.py b/Week_02/id_15/LeetCode_3_015.py new file mode 100644 index 00000000..84c04c27 --- /dev/null +++ b/Week_02/id_15/LeetCode_3_015.py @@ -0,0 +1,12 @@ +class Solution: + def lengthOfLongestSubstring(self, s: str) -> int: + substring, length, max_len = "", 0, 0 + for c in s: + if c in substring: + index = substring.find(c) + substring = substring[(index + 1)::] + substring += c + length = len(substring) + if length > max_len: + max_len = length + return max_len diff --git a/Week_02/id_15/NOTE.md b/Week_02/id_15/NOTE.md index 107ea7d6..820d3a2c 100644 --- a/Week_02/id_15/NOTE.md +++ b/Week_02/id_15/NOTE.md @@ -1 +1,11 @@ # 学习笔记 +## 日常计划 + - 完成相对应的算法习题 + +## 算法相关书籍 + - 任务:完成数据结构与算法Python语言描述阅读 + - 心得:这本书完全第一遍刷下来以后发现不是非常入门的深度,比上本图解的书难很多。不少地方都需要听下来思考,收获是更加深入的了解了Python这个语言背后的一些数据结构与算法的实现原理。比如内置函数Sort()背后的算法是依据Tim算法来实现的,再比如如果要调用Python实现堆栈,可以考虑用deque这个数据结构。 + +## 下周计划 + - 复刷之前做过的算法题和尚未完成的新题 + - 完成新一周的算法作业 diff --git a/Week_03/id_15/LeetCode_200_015.py b/Week_03/id_15/LeetCode_200_015.py new file mode 100644 index 00000000..284862b6 --- /dev/null +++ b/Week_03/id_15/LeetCode_200_015.py @@ -0,0 +1,26 @@ +class Solution: + def numIslands(self, grid: List[List[str]]) -> int: + num_islands = 0 + + for row in range(len(grid)): + for column in range(len(grid[0])): + if grid[row][column] == '1': + num_islands += 1 + self.island_dfs(grid, row, column) + + return num_islands + + def island_dfs(self, grid, row, column): + min_row, max_row = 0, len(grid) - 1 + min_column, max_column = 0, len(grid[0]) - 1 + + if (not min_row <= row <= max_row) or (not min_column <= column <= max_column): + return + elif grid[row][column] != '1': + return + else: + grid[row][column] = '0' + self.island_dfs(grid, row-1, column) + self.island_dfs(grid, row+1, column) + self.island_dfs(grid, row, column-1) + self.island_dfs(grid, row, column+1) diff --git a/Week_03/id_15/LeetCode_210_015.py b/Week_03/id_15/LeetCode_210_015.py new file mode 100644 index 00000000..56b76a57 --- /dev/null +++ b/Week_03/id_15/LeetCode_210_015.py @@ -0,0 +1,33 @@ +class Solution: + def dfs(self, n, g, flags, seqs): + if flags[n] == 0: return False + if flags[n] == 1: return True + + flags[n] = 0 + for m in g[n]: + if not self.dfs(m,g,flags,seqs): return False + flags[n] = 1 + seqs.append(n) + return True + + def findOrder(self, numCourses, prerequisites): + """ + :type numCourses: int + :type prerequisites: List[List[int]] + :rtype: List[int] + """ + + g = [[] for _ in range(numCourses)] + for b,a in prerequisites: + g[a].append(b) + + # -1: not visited + # 0: visiting + # 1: visited + flags = [-1]*numCourses + seqs = [] + for i in range(numCourses): + if not self.dfs(i,g,flags,seqs): return [] + + seqs = seqs[::-1] + return seqs diff --git a/Week_03/id_15/NOTE.md b/Week_03/id_15/NOTE.md index 107ea7d6..f1e5a245 100644 --- a/Week_03/id_15/NOTE.md +++ b/Week_03/id_15/NOTE.md @@ -1 +1,19 @@ # 学习笔记 + +## 日常计划 + - 完成相对应的算法习题 + +## 心得交流 + - 本周和小组同学一起线下交流了一整个下午,大家非常认真的梳理了数据结构和算法的基本知识脉络。 + - 除了算法以外的分享外,同学们还给讲解了开发一般流程,记录如下: + - 需求沟通:产品经理与需求提出方进行需求沟通与分析,明确任务 + - 可行性分析:产品经理与程序员沟通,敲定可行性以及具体的使用语言与框架 + - 程序开发: + - 数据库人员建ER关系图 + - 开发人员进行程序开发 + - 程序测试 + - 产品交付与持续迭代 + +## 下周计划 + - 复刷之前做过的算法题和尚未完成的新题 + - 完成新一周的算法作业