zoukankan      html  css  js  c++  java
  • 198. 打家劫舍

    198. 打家劫舍

    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

    给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

    示例 1:

    输入: [1,2,3,1]
    输出: 4
    解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
         偷窃到的最高金额 = 1 + 3 = 4 。

    示例 2:

    输入: [2,7,9,3,1]
    输出: 12
    解释: 偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
         偷窃到的最高金额 = 2 + 9 + 1 = 12 。

    搜索初级优化-记忆化搜索
     1 class Solution {
     2 public:
     3     vector<int> v;
     4     int dfs(int level,vector<int>& nums ){
     5         if(level>=nums.size()) return 0;
     6         if(v[level]!=-1) return v[level];
     7         v[level]=max(dfs(level+2,nums)+nums[level],dfs(level+1,nums));
     8         return v[level];// 进行记忆化存储 
     9     }
    10     int rob(vector<int>& nums) {
    11         v=nums;
    12         for(int i=0;i<v.size();i++){
    13             v[i]=-1;
    14         }
    15         if(nums.size()<=0) return 0;
    16         return dfs(0,nums);
    17     }
    18 };
    View Code
    动态规划
     1 class Solution {
     2 public:
     3     int rob(vector<int>& nums) {
     4         if(nums.size()<=0) return 0;
     5         if(nums.size()==1) return nums[0];
     6         vector<int> dp(nums.size(),0);
     7         dp[0]=nums[0];
     8         dp[1]=max(nums[0],nums[1]);
     9         for(int i=2;i<nums.size();i++){
    10             dp[i]=max(dp[i-2]+nums[i],dp[i-1]);
    11         }
    12         return dp[nums.size()-1];
    13     }
    14 };





  • 相关阅读:
    js高级1
    JUC总览
    7 种阻塞队列相关整理
    Exchanger 相关整理
    Semaphore 相关整理
    ConcurrentLinkedQueue 相关整理
    ConcurrentHashMap(1.8) 相关整理
    ConcurrentHashMap(1.7) 相关整理
    ReentrantReadWriteLock 相关整理
    LockSupport 工具相关整理
  • 原文地址:https://www.cnblogs.com/NirobertEinteson/p/12493167.html
Copyright © 2011-2022 走看看