iT邦幫忙

2025 iThome 鐵人賽

0
自我挑戰組

leetcode解題學習java系列 第 18

30天LeetCode挑戰紀錄-DAY18. House Robber

  • 分享至 

  • xImage
  •  

題目

https://ithelp.ithome.com.tw/upload/images/20251019/20178158QXIpfWbHq8.png
他說我是一個專業的小偷,然後每棟房屋裡都有一定的現金,但限制是相鄰的房屋都連接了保全系統,如果同一晚偷了相鄰的兩間房,那系統會自動報警。
所以他會給我們每棟房屋的金額,我們要計算並迴傳今天可以偷到的最大值。

想法

這題的規定就是:不能偷相鄰的兩棟,所以我就要決定,我是要偷現在這間+上上家比較多還是前面一間比較多。
那就是我們要寫一個來選擇誰比較多的了,所以我想說可以用也是費波那契數的概念,只是我要選擇這個數+上上個多還是上一個比較多,就用了max()來幫我決定我要偷最多的那一個選擇,就是動態規劃+選擇啦。

程式碼

class Solution {
    public int rob(int[] nums) {
        int n = nums.length;
        if (n == 1) return nums[0]; //如果只有一間就直接偷他
        
        int prev2 = nums[0]; // 偷到第i-2的最大值
        int prev1 = Math.max(nums[0], nums[1]); // 偷到第i-1的最大值
        
        for (int i = 2; i < n; i++) {
            int current = Math.max(prev1, prev2 + nums[i]); //選要這間+上上間或是上一間
            prev2 = prev1;
            prev1 = current;
        }
        return prev1;
    }
}

執行成功!
https://ithelp.ithome.com.tw/upload/images/20251019/20178158wrkmF1xWsu.png


上一篇
30天LeetCode挑戰紀錄-DAY17. Fibonacci Number
下一篇
30天LeetCode挑戰紀錄-DAY19. Coin Change
系列文
leetcode解題學習java19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言