zoukankan      html  css  js  c++  java
  • LeetCode 213. 打家劫舍II

    题目描述链接:https://leetcode-cn.com/problems/house-robber-ii/

    此题之前博主发过的打家劫舍问题极为相似,不同的是此次要求第一个房屋和最后一个房屋是相邻的。关键

    就是如何将此题转换为像第一题一样的思路求解。由于第一个房屋和最后一个房屋是相邻的,那么第一个房屋

    和最后一个房屋最多选择一个也可以都不选,因此将此问题转换为求出不选第一个房屋时的答案,和不选最后

    一个房屋时的答案,最后返回两者的最大值即可。其中这两个子问题的求解就类似打家劫舍的问题了,可以参考

    博主写过的此篇博客:https://www.cnblogs.com/zzw-/p/13416359.html

    最后LeetCode C++求解代码参考如下:

    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]);
            }
            int dp[len];
            dp[0]=0;
            dp[1]=nums[1];
            dp[2]=nums[2];
            int maxium1=dp[1];
            for(int i=3;i<len;i++){
               dp[i]=maxium1+nums[i];
               maxium1=max(maxium1,dp[i-1]);
            }
            int ans1=max(dp[len-1],maxium1);
            dp[0]=nums[0];
            dp[1]=nums[1];
            int maxium2=dp[0];
            for(int i=2;i<len-1;i++){
                dp[i]=maxium2+nums[i];
                maxium2=max(maxium2,dp[i-1]);
            }
            int ans2=max(maxium2,dp[len-2]);
            return max(ans1,ans2);
    
        }
    };

    时间复杂度:从代码中可以看到为对数组的两次线性遍历故为:O(n) 。空间复杂度:需要一个dp数组记录为:O(n)。

  • 相关阅读:
    记录一个jsonb_array_elements因数据问题被坑的点
    postgresql 中的 with 用法
    Java中4个元注解
    Java8 stream filter map
    sql 函数
    sql 判断选择语句
    面试里的套路(1)
    python 路径
    postsql sqlalchemy的事务提交问题
    网站响应过慢问题
  • 原文地址:https://www.cnblogs.com/zzw-/p/13441946.html
Copyright © 2011-2022 走看看