您好,登錄后才能下訂單哦!
本篇內容主要講解“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怎么解決打家劫舍的問題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。