• 198.House Robber


    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    int rob(vector<int>& nums) {
        if (nums.size() == 0) return 0;
        if (nums.size() == 1) return nums[0];
        if (nums.size() == 2) return max(nums[0], nums[1]);
        int len = nums.size();
        vector<int> nums_tmp1(nums.begin(),nums.begin() + len-1);
        vector<int> nums_tmp2(nums.begin(),nums.begin() + len-2);
        return max(nums[len-1] + rob(nums_tmp2), rob(nums_tmp1));
    }

    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    int rob(vector<int>& nums) {
        int len = nums.size();
        if (len == 0) return 0;
        if (len == 1)return nums[0];
        int* ans;
        ans = new int[len];
        ans[0] = nums[0];
        ans[1] = max(nums[0], nums[1]);
        for (int i = 2; i < len; i++) {
            ans[i] = max(nums[i] + ans[i - 2], ans[i - 1]);
        }
        return ans[len-1];
        delete []ans;
    }
    
    int main() {
        vector<int> a = { 2,7,9,3,1 };
        cout << rob(a) << endl;
        return 0;
    }

    Java 版:

    思路:

      • 动态规划问题,不能使用相邻的两个数,即,分为:
      • 如果要使用当前的数字,则 : Sum = nums[i-2] + nms[i];
      • 如果不使用当前的数字,则:Sum = nums[i-1];
      • 比较这两个数字,哪一个更大。

    class Solution {
        public int rob(int[] nums) {
            if(nums.length == 0) return 0;
            int n = nums.length;
            if(n == 1) return nums[0];
            nums[1] = Math.max(nums[1], nums[0]);
            for(int i = 2; i < n; i++){
                nums[i] = Math.max(nums[i-2] + nums[i], nums[i-1]);//状态转移方程
            }
            return nums[n-1];
        }
    }
  • 相关阅读:
    向SDE加入图形的时候出现Update fail,5019
    在两台机器上安装分别安装oracle和arcsde
    Maxthon与IE的Cookie冲突
    数据迁移如何不需要中止业务
    ArcSde注册版本后的表
    小心注释掉的js代码也会引起错误
    vb.net对循环内的变量分配和初始化的处理
    一个webservice的初级例子
    事务处理
    ado.net 相对于ado主要有哪些改进
  • 原文地址:https://www.cnblogs.com/luo-c/p/12865639.html
Copyright © 2020-2023  润新知