10.3 - hard总结2

87. Scramble String: 区间dp加上memory search
97. Interleaving String: 简单的双链dp问题
99. Recover Binary Search Tree: 利用inorder的方法找到两个变化的值,然后对node进行重新赋值
115. Distinct Subsequences: 又是双链的dp问题
123. Best Time to Buy and Sell Stock III: 因为最多买卖两次,可以记录每一点之前的片段可以获得最大值和每一点之后的片段可以获得的最大值,然后找出最大的分割点就可以了
124. Binary Tree Maximum Path Sum: 在helper函数里记录两个值,一个是maxvalue,一个maxsinglevalue
126. Word Ladder II:这题用bfs,然后记录一个逆向的trace
128. Longest Consecutive Sequence: 利用hash,还是比较容易做的
132. Palindrome Partitioning II:先用一个二维dp计算出所有i~j满足panlin的情况,然后再用一个一维dp来选择出最小的cut的情况
135. Candy: greedy的方法
140. Word Break II: 有时候在backtracking的时候可以返回一个list
145. Binary Tree Postorder Traversal: 有一个逆转preorder的写法,但感觉这个写法不是正途,如果在其它程序里需要用到这个片段的话,就没办法了
146. LRU Cache: 基本想法就是字典+上双向链表,字典里存的是key到链表的节点,每次访问的时候可以把访问的元素从链表里拆开,然后放到最后一位。
149. Max Points on a Line: 利用hash表慢慢做就好了
154. Find Minimum in Rotated Sorted Array II: 这个如果有duplicates就没办法了,时间复杂度就没法优化了
158. Read N Characters Given Read4 II - Call multiple times: 如果要call很多次,就要设置一个全局变量queue来存储所有读进来的chars
159. Longest Substring with At Most Two Distinct Characters: 简单的前向型指针问题
164. Maximum Gap: 比较麻烦的一道题,要用到bucketsort
174. Dungeon Game: 很巧妙的一道题,利用逆向dp,也就是从终点开始的dp,# dp[i][j] the minimum hp for i,j to go to the last block
188. Best Time to Buy and Sell Stock IV: 一道比较经典的dp题 # dp[i][j] 对前j个元素进行最多i次transactions获取的最大值, 有点儿区间dp的意思

你可能感兴趣的:(10.3 - hard总结2)