1. 当数组长度小于3时,返回数组前两位最大值。
  2. 当数组长度大于3是,动态规划求解,从第3位开始,当前值为 “前一位的最优解”和“前两位最优解+当前值”去max
    class Solution {
    public:
        int rob(vector<int>& nums) {
            vector<int> dp(nums.size(), 0);
            dp[0] = nums[0];
            dp[1] = max(nums[0], nums[1]);
            if (nums.size() <= 2) {
                return max(dp[0], dp[1]);
            }
            for (int i = 2; i < nums.size(); i++) {
                // 当前最为前一位最优解 和 前两位最优解 + 当前值 取max
                dp[i] = max(dp[i - 1], dp[i - 2] + nums[i]);
            }
            return dp[nums.size() - 1];
        }
    };
    static const auto io_sync_off = []() { //lambda函数
        // turn off sync,关闭输入输出流的缓存
        std::ios::sync_with_stdio(false);
        // untie in/out streams,实现输入和输出流的解绑
        std::cin.tie(nullptr);
        return nullptr;
    }
    ();