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

    lt198 打家劫舍I

    [1,2,3,1] 相邻不能偷
    dp 记录最大

    func rob(nums []int) int {
    	n:=len(nums)
    	//注意边界值,0个返回0,一个返回最初值
    	if n<=0{
    		return 0
    	}
    	if n==1{
    		return nums[0]
    	}
    	//dp代表到达位置的最大值,前一个和i-2+nums[i]的最大值
    	dp:=make([]int,len(nums)+1)
    	dp[0] = nums[0]
    	dp[1] = max(dp[0],nums[1])
    
    	for i:=2;i<n;i++{
    		dp[i] = max(dp[i-2]+nums[i],dp[i-1])
    	}
    	return dp[n-1]
    }
    func max(x, y int)  int{
    	if x>y{
    		return x
    	}else{
    		return y
    	}
    }
    

    lt213 打家劫舍II

    房子头尾相连,相邻不能偷
    两个dp分别记录拿第一个房间和不拿第一个
    0,1,2时直接返回

    func rob(nums []int) int {
    	if len(nums)==0{
    		return  0
    	}
    	if len(nums)==1{
    		return nums[0]
    	}
    	if len(nums)==2{
    		return max(nums[0],nums[1])
    	}
    	dp:=make([]int,len(nums)+1)
    	dp2:=make([]int,len(nums)+1)
    	dp[0] = nums[0]
    	dp[1] = max(dp[0],nums[1])
    
    	dp2[0] = nums[1]
    	dp2[1] = max(dp2[0],nums[2])
    
    	//两个  代表拿第一个和不拿第一个
    	for i:=2;i<len(nums)-1;i++{
    		dp[i] = max(dp[i-1],dp[i-2]+nums[i])
    		dp2[i] = max(dp2[i-1],dp2[i-2]+nums[i+1])
    	}
    	return max(dp[len(nums)-2],dp2[len(nums)-2])
    }
    
    func max(x,y int)int  {
    	if x>y{
    		return x
    	}else{
    		return y
    	}
    }
    
    
  • 相关阅读:
    C#生成唯一值的方法汇总
    Ajax && json在springmvc中的使用
    spring集成mybatis
    mybatis iBatis
    springjdbc
    拦截器
    系统分层
    Java反射(reflect)
    springmvc
    spring 之 使用注解简化配置
  • 原文地址:https://www.cnblogs.com/9527s/p/14372421.html
Copyright © 2011-2022 走看看