【leetcode】House Robber I && II
2015-08-21 17:05
363 查看
/** * @author johnsondu * @time 2015.8.21 17:00 * @description simple dynamic programming, dp[i] = max(dp[i-1], dp[i-2] + num[i]); * @url https://leetcode.com/problems/house-robber/ */ class Solution { public: int max(int a, int b) { return a > b ? a : b; } int rob(vector<int>& nums) { int len = nums.size(); if(len < 1) return 0; if(len < 2) return nums[0]; int *dp = new int[len]; dp[0] = nums[0]; dp[1] = max(dp[0], nums[1]); for(int i = 2; i < len; i ++) { dp[i] = max(dp[i-1], dp[i-2] + nums[i]); } return dp[len-1]; } };
/** * @author johnsondu * @time 2015.8.21 17:00 * @description simple dynamic programming, plus a circle in it. * @url https://leetcode.com/problems/house-robber-ii/ */ class Solution { public: int max(int a, int b) { return a > b ? a : b; } int rob(vector<int>& nums) { int len = nums.size(); if(len == 0) return 0; if(len == 1) return nums[0]; // record the maximum result exclude the last element in nums. int *dp1 = new int[len + 1]; // recore the maximum result exclude the first element in nums. int *dp2 = new int[len + 1]; memset(dp1, 0, sizeof(dp1)); memset(dp2, 0, sizeof(dp2)); dp1[1] = nums[0]; dp2[2] = nums[1]; for(int i = 2; i < len; i ++) { dp1[i] = max (nums[i-1] + dp1[i-2], dp1[i-1]); } for(int i = 3; i<= len; i ++) { dp2[i] = max(nums[i-1] + dp2[i-2], dp2[i-1]); } return max(dp1[len-1], dp2[len]); } };
相关文章推荐
- C++ new 之 placement new、operator new、new operator
- 虚方法
- Android UI设计:TextView与EditText
- 工作常用数据库SQL语句汇总
- 居然还有WM_TIMECHANGE(只在用户手动改变系统时间时才会产生作用)
- python爬虫1
- 友盟各个插件的使用方法
- c++ 四大函数练习
- 日期 12 小时制 24 小时制
- android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
- 线程6:互斥量,解决线程冲突
- CodeForces 6C - Alice, Bob and Chocolate
- 分析运行结果,说明原理。(没有分析结果不得分) import java.util.ArrayList; class Data { int
- nginx 作为web服务器
- 项目功能
- 编写一个类,在main方法中定义一个Map对象(采用泛型),加入若干个对象,然后遍历并打印出各元素的key和value。
- 多台计算机之间利用ssh实现无密码登录
- C#中抽象类与接口的区别
- iOS中的通信模式解析
- powerdesigner显示注释