leetcode外的算法题练习总结(updating)(自言自语)
2015-02-14 10:39
281 查看
1. Maximum Values Of Sliding Windows
一个array, 一个大小为k的window,移动window返回每次window的最大值
思路: 用deque, 每次新元素入deque的时候, 顶部弹出并维护deque使其保持递减。如果底部最大值出了window范围,底部弹出。
2. Majority Number及其变种
最基础的是问你数组中有没有一个数,出现次数占到一半以上。follow-up就是输出所有出现过k/Length次的数。如果只是解决这个问题的话思路倒是很直接。用一个HashMap存储所有元素极其出现次数。然后判断map里value>k/Length的输出,输出的时候加个HashSet去除重复输出。
3. Interleave array
给定两个数组,问你第三个数组能不能由前两个数组拼接而成(保持前两个数组元素的相对位置不变)。
思路是DP。设置boolean二维数组存放当前是否valid。base case当然是设[0][0]为true。然后两个index扫描两个数组。更新二维boolean。
4. Reconstruct binary search tree with pre-order traversal, post-order traversal
recursion。
pre-order:当前数组第一个是root,剩下的部分找到next larger than this root。分开,前半部分的recursion结果是root.left, 后半部分的结果是root.right。然后nextLarger用binary search的方法找。
post-order: 当前数组最后一个为root, 剩下的部分找到next smaller than this root。分开,前半部分的recursion结果是root.left, 后半部分的结果是root.right。然后nextSmaller用binary search的方法找。
5. Reconstruct binary search tree with level-order traversal
仍然是recursion。只不过recursion的时候传进去的是个list的参数。每次recursion先把第一个元素变成root,然后建两个list, 比root小的全放第一个list, 比root大的全放第二个list。
6.Largest Set of Points With Positive Slope
DP的思想。先把所有点按照x坐标sort,两个index,一个1~n,一个1~index1,每次当index1,index2的点满足以后,取max(index1,index2)++,最后再取global的largest。
7.Jump Game 及其变种
数组中每个元素表示最大能往前跳多少。第一题是判断能不能走到最后,其实用贪心算法就好,reach=max(arr[i]+i,reach)。最后看reach是否能超过数组长度。第二题是问跳到最后一个需要的最少步数,用DP,当能跳到的i时候,max(res[j]+j,res[i])。第三问是问跳出数组的最小步数,这个时候开辟的res长度要是len+1,最后一位表示跳到外面。其实只比第二问多走一次循环。
8.Merge Stone
每次merge两垛stone的时候,cost为两垛值的和,求所有stone merge为一垛的情况下,最小cost多少。用DP解。需要开辟两个数组,一个数组存储start~end的subSum,一个数组存储start~end的minCost。end从0到arrayLength循环,start从end到0循环。当start==end的时候相当于进行初始化操作。start!=end的时候,就要开始计算这段区间的minCost了。再加一个循环mid从end-1到start。min{minCost[start][end], minCost[start][mid]+minCost[mid+1][end]+subSum[start][end]}。最后返回minCost[0][length-1]就好了。
9.
顺便推广自己的微店---美国加拿大留学申请咨询 http://weidian.com/s/316012464?wfr=c
一个array, 一个大小为k的window,移动window返回每次window的最大值
思路: 用deque, 每次新元素入deque的时候, 顶部弹出并维护deque使其保持递减。如果底部最大值出了window范围,底部弹出。
2. Majority Number及其变种
最基础的是问你数组中有没有一个数,出现次数占到一半以上。follow-up就是输出所有出现过k/Length次的数。如果只是解决这个问题的话思路倒是很直接。用一个HashMap存储所有元素极其出现次数。然后判断map里value>k/Length的输出,输出的时候加个HashSet去除重复输出。
3. Interleave array
给定两个数组,问你第三个数组能不能由前两个数组拼接而成(保持前两个数组元素的相对位置不变)。
思路是DP。设置boolean二维数组存放当前是否valid。base case当然是设[0][0]为true。然后两个index扫描两个数组。更新二维boolean。
4. Reconstruct binary search tree with pre-order traversal, post-order traversal
recursion。
pre-order:当前数组第一个是root,剩下的部分找到next larger than this root。分开,前半部分的recursion结果是root.left, 后半部分的结果是root.right。然后nextLarger用binary search的方法找。
post-order: 当前数组最后一个为root, 剩下的部分找到next smaller than this root。分开,前半部分的recursion结果是root.left, 后半部分的结果是root.right。然后nextSmaller用binary search的方法找。
5. Reconstruct binary search tree with level-order traversal
仍然是recursion。只不过recursion的时候传进去的是个list的参数。每次recursion先把第一个元素变成root,然后建两个list, 比root小的全放第一个list, 比root大的全放第二个list。
6.Largest Set of Points With Positive Slope
DP的思想。先把所有点按照x坐标sort,两个index,一个1~n,一个1~index1,每次当index1,index2的点满足以后,取max(index1,index2)++,最后再取global的largest。
7.Jump Game 及其变种
数组中每个元素表示最大能往前跳多少。第一题是判断能不能走到最后,其实用贪心算法就好,reach=max(arr[i]+i,reach)。最后看reach是否能超过数组长度。第二题是问跳到最后一个需要的最少步数,用DP,当能跳到的i时候,max(res[j]+j,res[i])。第三问是问跳出数组的最小步数,这个时候开辟的res长度要是len+1,最后一位表示跳到外面。其实只比第二问多走一次循环。
8.Merge Stone
每次merge两垛stone的时候,cost为两垛值的和,求所有stone merge为一垛的情况下,最小cost多少。用DP解。需要开辟两个数组,一个数组存储start~end的subSum,一个数组存储start~end的minCost。end从0到arrayLength循环,start从end到0循环。当start==end的时候相当于进行初始化操作。start!=end的时候,就要开始计算这段区间的minCost了。再加一个循环mid从end-1到start。min{minCost[start][end], minCost[start][mid]+minCost[mid+1][end]+subSum[start][end]}。最后返回minCost[0][length-1]就好了。
9.
顺便推广自己的微店---美国加拿大留学申请咨询 http://weidian.com/s/316012464?wfr=c
相关文章推荐
- 2.25-3.3算法练习总结
- leetcode演练算法-----mit学习算法,,学习和练习相得益彰
- 『LeetCode』练习第三弹_算法5题
- 算法练习专题——LeetCode系列之 Two Sum
- 算法练习_LeetCode_链表1
- 『算法』读书笔记 1.1Java语法 - 练习代码总结
- 『LeetCode』练习第一弹_算法1,2题
- 常见算法练习leetcode
- leetcode 算法练习 two-sum
- 关于Leetcode上二叉树的算法总结
- 常见算法练习leetcode
- 常见算法练习leetcode
- 『LeetCode』练习第二弹_算法3,4题
- 算法总结(7)--leetcode上的递归,BFS,DFS思考
- LeetCode 算法练习 Compare Version Numbers
- LeetCode-算法总结
- LeetCode练习与总结
- 『LeetCode』练习第五弹_算法7,8题
- LeetCode初级算法练习
- [leetcode]--刷leetcode算法目录和算法总结目录