摘要: 需要O(1)时间求出最小值。如果换成最大值,那就和“滑动窗口的最大值”一题思路差不多了。 用一个栈保存元素,用另一个栈来存储最小值,如果新增的元素比栈顶元素小则压入,否则不压入。 如果检测到第一个栈把最小元素弹出了,那么另一个栈也弹出栈顶元素。 “滑动窗口的最大值”更加复杂一点,而且是用deque保 阅读全文
posted @ 2016-03-29 22:35 vaevaevae 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 调整后奇数相对位置不变,偶数相对位置不变。可以先找到第一个偶数所在位置和最后一个奇数所在位置,然后把偶数一次次向后移动,空出来的第一个位置用来填充最近的一个奇数,直到把最后一个奇数填充到空出来的位置为止。 1 class Solution { 2 public: 3 void reOrderArra 阅读全文
posted @ 2016-03-29 22:21 vaevaevae 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 具体分析可见http://blog.csdn.net/libin1105/article/details/48267113 需要指出的是,上述博客中2*(a+b)=a+b+c+b应该改为2*(a+b)=a+b+(c+b)*n,其中n为自然数。 然后得到关系式a=(b+c)*n-b 由此可见两个指针会 阅读全文
posted @ 2016-03-28 16:27 vaevaevae 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 1 class Solution { 2 public: 3 int LastRemaining_Solution(unsigned int n, unsigned int m) 4 { 5 if(n<1||m<1) 6 return -1; 7 int last=0; 8 for(int i=2; 阅读全文
posted @ 2016-03-27 21:30 vaevaevae 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 先整体翻转一次,再一个个进行翻转,需要注意的是代码里一些字符串的操作,值得记住。 1 class Solution { 2 public: 3 string ReverseSentence(string str) { 4 if (str.empty()) return str; 5 reverse( 阅读全文
posted @ 2016-03-27 14:59 vaevaevae 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 又是一道字符串题,一下子难有思路,所以往动态规划方向思考。 找到动归思路不难,主要是要考虑各种情况。首先将pattern进行处理,记下不含"*"的字符串npattern,同时用一个vector记录新字符串里有哪几个字符是可以任意个数的(这里我本来以为像b*b*这样的要简化为b,后来发现简化为bb就可 阅读全文
posted @ 2016-03-27 00:16 vaevaevae 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 先判断有没有字符e或者E存在,如果有,则把字符分为两个字符串,分别判断这两个字符串是否能形成一个数字(注意e或E后不能有小数点,这个可以提前判断排除)。如果没有,那就直接判断这个字符串是否能形成一个数字。 1 class Solution { 2 public: 3 bool judge(char* 阅读全文
posted @ 2016-03-26 23:07 vaevaevae 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 本质上是用BFS进行层序遍历,难点在于如何记录层的信息。 简单想法是可以用两个queue进行轮流操作。这里记录一种递归的做法。 1 class Solution { 2 public: 3 vector<vector<int> > levelOrder(TreeNode *root) { 4 vec 阅读全文
posted @ 2016-03-25 18:26 vaevaevae 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 回文串判断,需要学习这段代码中transform,tolower,isalnum函数的使用。这种函数可以节省时间,比如判断是不是字母或者字符的函数isalnum。 另外就是要学着用auto类型。 回文串判断其实就是用头尾两个指针一个个判断过去,没什么好方法。当然还有衍生出来的题目,比如判断一个字符串 阅读全文
posted @ 2016-03-22 16:33 vaevaevae 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 这道题一开始就没什么明确的正确想法,大致想着把树深度遍历,然后在遍历路径的上做文章,找到两条路径,这两条路径分别是树中部分结点相加之和第一大和第二大的路径。对这两条路径的头结点找最近公共祖先,然后看看这两条路径相连起来会不会是一个更大的和。找每条路径的基本思路来自求一个数组子数组的最大和题目。但最终 阅读全文
posted @ 2016-03-21 21:28 vaevaevae 阅读(163) 评论(0) 推荐(0) 编辑