本文將為大家詳細(xì)介紹“java中打家劫舍的示例分析”,內(nèi)容步驟清晰詳細(xì),細(xì)節(jié)處理妥當(dāng),而小編每天都會更新不同的知識點,希望這篇“java中打家劫舍的示例分析”能夠給你意想不到的收獲,請大家跟著小編的思路慢慢深入,具體內(nèi)容如下,一起去收獲新知識吧。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了龍城免費建站歡迎大家使用!
你是一個專業(yè)的小偷,計劃偷竊沿街的房屋,每間房內(nèi)都藏有一定的現(xiàn)金。這個地方所有的房屋都圍成一圈,這意味著第一個房屋和最后一個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統(tǒng),如果兩間相鄰的房屋在同一晚上被小偷闖入,系統(tǒng)會自動報警。
給定一個代表每個房屋存放金額的非負(fù)整數(shù)數(shù)組,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。
示例 1:
輸入: [2,3,2]
輸出: 3
解釋: 你不能先偷竊 1 號房屋(金額 = 2),然后偷竊 3 號房屋(金額 = 2), 因為他們是相鄰的。
示例 2:
輸入: [1,2,3,1]
輸出: 4
解釋: 你可以先偷竊 1 號房屋(金額 = 1),然后偷竊 3 號房屋(金額 = 3)。 偷竊到的最高金額 = 1 + 3 = 4 。
答案:
1public int rob(int[] nums) {
2 if (nums.length == 1)
3 return nums[0];
4 return Math.max(robHelper(nums, 0, nums.length - 2), robHelper(nums, 1, nums.length - 1));
5}
6
7private int robHelper(int[] num, int lo, int hi) {
8 int now = 0, last = 0;
9 for (int j = lo; j <= hi; j++) {
10 int temp = now;
11 now = Math.max(last + num[j], now);
12 last = temp;
13 }
14 return now;
15}
解析:
前面講過一個和這非常相似的題152,打家劫舍,但這個題和之前的不同的是房屋構(gòu)成了一個環(huán)形,如果我們已經(jīng)偷了第一個的話,肯定是不能再偷最后一個的。這里可能不太好理解的是robHelper中的代碼,now每循環(huán)一次都會讓now原來的值賦值給last,所以每次計算now的新值之前都會先把now的舊值保存在temp中。now永遠(yuǎn)保證的是偷竊的最大值。這是一道動態(tài)規(guī)劃題,其實我們只需要計算Math.max(rob(i-2)+num[i],rob(i-1))即可。他的思想就是我偷當(dāng)前這家和不偷當(dāng)前這家哪個價值最大。
Java的特點有哪些 1.Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,實現(xiàn)了面向?qū)ο罄碚摚试S程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程。 2.Java具有簡單性、面向?qū)ο蟆⒎植际?、安全性、平臺獨立與可移植性、動態(tài)性等特點。 3.使用Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。
感謝您能讀到這里,小編希望您對“java中打家劫舍的示例分析”這一關(guān)鍵問題有了從實踐層面最深刻的體會,具體使用情況還需要大家自己動手實踐使用過才能領(lǐng)會,如果想閱讀更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!