温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java怎么解决打家劫舍的问题

发布时间:2021-12-20 15:42:54 来源:亿速云 阅读:128 作者:iii 栏目:大数据

本篇内容主要讲解“Java怎么解决打家劫舍的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么解决打家劫舍的问题”吧!

  Java怎么解决打家劫舍的问题

如果要打劫第n家,就必然不能打劫第n-1家,所以打劫第n家得到的钱一共是第n家的钱加上前n-2家获得的最多的钱,即:f(n-2)+nums(n),如果不打劫第n家,获得的最大收益就是f(n-1),两者我们要去较大的那个,所以动态转移方程是:

f(n)=max(nums[n]+f(n-2),f(n-1))

package mainimport "fmt"func max(a,b int)int{    if a>b {        return a    }    return b}func rob(nums []int) int {    if len(nums)==0 {        return 0    }    if len(nums)==1 {        return nums[0]    }     dp := make([]int,len(nums))     dp[0] = nums[0]     dp[1] = max(nums[0],nums[1])     maxVal := dp[1]     for i:=2;i<len(nums);i++{        dp[i] = max(dp[i-1],dp[i-2]+nums[i])        maxVal = max(maxVal,dp[i])     }     return maxVal}func main() {    fmt.Println(rob([]int{1,2,3,1}))    fmt.Println(rob([]int{2,7,9,3,1}))}

到此,相信大家对“Java怎么解决打家劫舍的问题”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI