您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: