- two_sum.py
- 创建一个字典,判断字典里是否含有target-nums[i]
- add_two_nums.py
- 主要是对迭代器的考察
- Longest_Substring_Without_Repeating_Characters.py
- 定义滑动窗口,窗口内不需要再过一遍
- Median_of_Two_Sorted_Arrays.py
- 类似分治法对两个序列进行排序
- Longest_Palindromic_Substring.py
- 方法1:暴力循环,时间复杂度高 n^3
- 方法2:反转序列,寻找s与s’相同的最大的序列组(暂未实现)
- 方法3:动态规划,对方法1的改进,避免重复计算已经验证过的回文序列
- ZigZag_Conversion.py
- 方法1:构建形如解释原因的矩阵,方法较慢
- 方法2: 建立索引,对每个v字符的位置进行预先定义
- Reverse_Integer.py
- 没啥意思,lazy的方法反而更快
- String_to_Integer.py
- 需要注意特殊情况,比如9-6这种。另外也可以使用.strip方法去除空格
- Palindrome_Number.py
- 如果不转化成list,可以使用log函数来确定这个数的位数 divmod函数
- Regular_Expression_Matching.py(果然有难度)
- 使用动态规划方法,首先进行序列的补充,比如两个字符串同时添加相同的字符“0”后者“ ”,这样便于初始化
- 对于 * 的处理,如果 *前的字符和指向s的字符相等时:例如 abbbbc 与 ab*c
- 当*表示0时,其真值和dp[i][j-2]相同
- 当*表示1时,其真值和dp[i][i-1]相同
- 当*表示多个时,其真值和dp[i-1][i]相同
- 如果 *前的字符和指向s的字符不相同时: 例如 abbbcbbbc 与 ab*c
- *只能表示0,其真值和dp[i][j-2]相同
- Container_With_Most_Water.py
- 方法一:暴力循环
- 方法二:使用两个指针,一个指针指向最左,另一个指向最右,然后移动其中的较短的指针。
- Integer_to_Roman.py
- 建立一个罗马数字列表,
- Roman_to_Integer.py
- 同12
- Longest_Common_Prefix.py
- 暴力字符循环
- 分治法
- 二叉树法
- 3Sum.py
- 字典法
- 三个指针方法
- python 判断是否在列表中很费时间
- 3Sum_Closest.py
- 同15,使用三个指针的方法
- Letter_Combinations_of_a_Phone_Number.py
- 没什么好说的,我用循环居然faster 100%
- 4Sum.py
- 可以在15的基础上做, 排名第一的方法f复杂度和我相同,但它只需79ms,向不清楚原因,估计是过早的sop的原因节省了很多时间
- Remove_Nth_Node_From_End_of_List
- 自己创建一个根结点,这样可以避免讨论很多中情况,要学会利用这一点**。第10题就是
- 第二个方法比较巧妙。两个指针,第一个指针先走n步,这样剩余月要走的步数就是第二个指针要走的步数,然后再n出截断
- Valid_Parentheses
- 构建字典,使用堆栈,先进后出
- Merge_Two_Sorted_Lists
- 使用递归的方法或迭代的方法
- Generate_Parentheses
- 递归方法,应该重点掌握
- Merge_k_Sorted_Lists
- 暴力循环
- 分治法
- one by one 合并
- 使用优先级队列
- 将所有的数变成一维list,然后sorted函数
- Swap_Nodes_in_Pairs
- pre->a->b->b.next 变成 pre->b->a->b.next 最好是列出这个式子
- Reverse_Nodes_in_k
- 截取前k个listnode,对每组的lkistnode进行反转
- 其他方法导师再看县展坑
- Remove_Duplicates_from_Sorted_Array
- 简单体没什么好说的,注意看两种方法,答案那种方法号
- Remove_Element
- 同上,使用两指针方法
- Implement_strStr
- easy题,没啥好说的,看方法二,太优秀了
- Divide_Two_Integers
- 主要是使用移位的方法,然后每次相减大于零时,说明还可以移位
- Substring_with_Concatenation_of_All_Words
- 方法一:使用两个字典,第一个字典储存words,其中key是word,value是word的出现次数。然后计算每个子字符串,字符串长度为word的长度 每个子字符串中word的次数如果和dict1的value相同,则说明符合
- 方法二:
- Next_Permutation
- 答案真是太奇妙了,看动图吧
- Longest_Valid_Parentheses
- brute force: two points, from every left to right judge whether valid
- Using Dynamic Programming: too hard. We make use of a dp array where ith element of dp represents the length of the longest valid substring ending at ith index.
- Using Stack: hard
- two counters left and right, easy: Two traversals of the string
- Search_in_Rotated_Sorted_Array
- binary search
- can find the index of min num
- Find_First_and_Last_Position_of_Element_in_Sorted_Array
- firstly find the first index, if nums[mid] == target, we should assign right = mid - 1 and in the meanwhile, we should write the mid index, then we use the same method to find the right target
- Search_Insert_Position
- bruce force
- binary search
- Valid_Sudoku
- the key is create a list to store number
- 38_Count_and_Say
- easy, bruce force
- Combination_Sum
- recursion: slow and not easy to delete duplication
- backtracking example
- Combination_Sum_II
- dfs condition, if j > 0 or if j > index are different
- First_Missing_Positive
- the key is swap:
tmp = nums[i]
nums[i] = nums[tmp - 1]
nums[tmp - 1] = tmp
- the key is swap:
- Trapping_Rain_Water
- two points(my method, and range for maxheight. time limits: maxheight * width / 2 should range maxheight
- brute force: for one height, find max and min height around it, and then, ans += min(left_max,right_max)-it
- dynamic programming: store max of left and min height
- stack:(not understand yet) we can use stack to keep track of the bars that are bounded by longer bars and hence, may store water.
- two points: if left_max < right_max the move left, else move right
- Multiply_Strings
- understanding mul ,just like int
- Jump_Game_II
- dynamic programming is running out of mem
- BFS
- Permutations
- same as 47
- Permutations_II
- use dict keys to reduce duplicate
- other method to be, the line "break" is beautiful
- Rotate_Image
- ~i = -i - 1 often used in List
- zip method and zip(*) method
- reverse() method
- Categorize_by_Sorted_String
- 方法一:遍历,对每个单词进行排序,然后对比
- 方法二:每个字母对应一个数字,设置26个空格,如果有字母a,则在0出加一,最后比较有多少个是完全一样的
- using dict.setdefault method
- Pow[x, n]
- 使用递归实现
- Maximum_Subarray
- dp
- max_sum and sum
- Length_of_Last_Word
- easy