Leetcode# 198 House Robber
2015-09-17 06:45
232 查看
Implement the following operations of a stack using queues.
push(x) -- Push element x onto stack.
pop() -- Removes the element on top of the stack.
top() -- Get the top element.
empty() -- Return whether the stack is empty.
Notes:
You must use only standard operations of a queue -- which means only
Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue.
You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).
Update (2015-06-11):
The class name of the Java function had been updated to MyStack instead of Stack.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and all test cases.
Difficulty:Easy
基本的思想是:nums[i] = max(nums[i-1], nums[i-2] + nums[i]);
需要注意的就是前四个数要提前确定下。
push(x) -- Push element x onto stack.
pop() -- Removes the element on top of the stack.
top() -- Get the top element.
empty() -- Return whether the stack is empty.
Notes:
You must use only standard operations of a queue -- which means only
push to back,
peek/pop from front,
size, and
is emptyoperations are valid.
Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue.
You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).
Update (2015-06-11):
The class name of the Java function had been updated to MyStack instead of Stack.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and all test cases.
Difficulty:Easy
基本的思想是:nums[i] = max(nums[i-1], nums[i-2] + nums[i]);
需要注意的就是前四个数要提前确定下。
class Solution { public: int rob(vector<int>& nums) { int len = nums.size(); if(len==0) return 0; if(len==1) return nums[0]; if(len==2) return max(nums[0],nums[1]); if(len>=4) nums[3] = max(max(nums[0]+nums[2],nums[1]+nums[3]),nums[0]+nums[3]); if(len>=3) nums[2] = max(nums[0]+nums[2],nums[1]); for(int i = 4;i<len;i++) nums[i] = max(nums[i]+nums[i-2],nums[i-1]); return max(nums[len-1],nums[len-2]); } };
相关文章推荐
- 29. Divide Two Integers (INT, Overflow)
- window远程桌面连接 Ubuntu 14.04
- Spring的注解方式
- Oracle安装错误ora-00922(缺少或无效选项)
- linux定时器HZ和Jiffies
- 个人信息加密方案
- JS实现完全语义化的网页选项卡效果代码
- JS实现仿FLASH效果的竖排导航代码
- JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
- 黑帽seo劫持程序,js劫持搜索引擎代码
- 黑马程序员--较深入研究@property
- 黑马程序员———OC中的内存管理
- 大数定律与抽样陷阱
- [LeetCode]Sliding Window Maximum
- Math对象的几个取整方法(ceil,floor,round)
- K Nearest Neighbor 算法
- 与AngularJS的约会之事件循环+watchers源码分析
- K-Means 算法
- LeetCode-Add Binary
- LeetCode Largest Rectangle in Histogram