2014年12月18日
摘要: 实现一个堆,可以push,pop,top,和getMin主要的应该是getMin,如何找到最小的数。如果每次要找最小的数遍历一边,那貌似没什么意义了。做法是,用两个堆,一个用来正常的操作,另一个是记录到当前最小值,如果来一个数字,比最小值的那个对的top还小那就,两个堆都要push,如果pop的时候... 阅读全文
posted @ 2014-12-18 17:43 higerzhang 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 和上题一样,这里要求可以重复数字。那么需要考虑的就比较多一步了。如果中间的值和左边的值相等的话,并且中间下标不等于左边下标的话,那么就存在问题了,因为我们不知道最小的到底会出现在哪里。那么就只能left++,继续判断了,所以最坏情况还是O(n)只要在上题基础上,稍微修改一下就行了。class Sol... 阅读全文
posted @ 2014-12-18 12:20 higerzhang 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 一个有序数组,没有重复数字,向右推进了几次,找出最小值。例如(i.e.,0 1 2 4 5 6 7might become4 5 6 7 0 1 2).直接遍历一次找到答案就没有意义了。之前做过类似的题目,不过我找不到具体的题号了。所以就随便搜了下Garnker的,知道是Search in Rota... 阅读全文
posted @ 2014-12-18 12:09 higerzhang 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 之前好像做过这样的,以前是加法,现在是乘法。一开始我也傻逼得用n方的试了下,肯定是TLE的。那显然就是可以O(n)解决了用两个dp数组,一个存最大值,一个存最小值,因为可能是负数再乘以负数就很大了,所以每次更新需要借助最小值一同更新最大值。最后遍历一边dp大的数组就有答案了。class Soluti... 阅读全文
posted @ 2014-12-18 11:20 higerzhang 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 将句子的词反转,例如:Given s = "the sky is blue",return "blue is sky the".思路:就是从后面往前,找到非空格的长度,然后取到另一个串中。遍历一次就可以了。如下:class Solution {public: void reverseWords... 阅读全文
posted @ 2014-12-18 09:32 higerzhang 阅读(140) 评论(0) 推荐(0) 编辑