<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實(shí)戰(zhàn)198:打家劫舍

          共 3166字,需瀏覽 7分鐘

           ·

          2021-03-01 13:54

          算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問題叫做 打家劫舍,我們先來看題面:
          https://leetcode-cn.com/problems/house-robber/

          You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will automatically contact the police if two adjacent houses were broken into on the same night.

          Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.


          題意


          你是一個(gè)專業(yè)的小偷,計(jì)劃偷竊沿街的房屋。每間房?jī)?nèi)都藏有一定的現(xiàn)金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統(tǒng),如果兩間相鄰的房屋在同一晚上被小偷闖入,系統(tǒng)會(huì)自動(dòng)報(bào)警。

          給定一個(gè)代表每個(gè)房屋存放金額的非負(fù)整數(shù)數(shù)組,計(jì)算你 不觸動(dòng)警報(bào)裝置的情況下 ,一夜之內(nèi)能夠偷竊到的最高金額。

          示例


          示例 1:

          輸入:[1,2,3,1]
          輸出:4
          解釋:偷竊 1 號(hào)房屋 (金額 = 1) ,然后偷竊 3 號(hào)房屋 (金額 = 3)。
            偷竊到的最高金額 = 1 + 3 = 4 。

          示例 2:

          輸入:[2,7,9,3,1]
          輸出:12
          解釋:偷竊 1 號(hào)房屋 (金額 = 2), 偷竊 3 號(hào)房屋 (金額 = 9),接著偷竊 5 號(hào)房屋 (金額 = 1)。
            偷竊到的最高金額 = 2 + 9 + 1 = 12 。


          解題


          這道題的本質(zhì)相當(dāng)于在一列數(shù)組中取出一個(gè)或多個(gè)不相鄰數(shù),使其和最大。那么我們對(duì)于這類求極值的問題首先考慮動(dòng)態(tài)規(guī)劃Dynamic Programming來解,我們維護(hù)一個(gè)一位數(shù)組dp,其中dp[i]表示到i位置時(shí)不相鄰數(shù)能形成的最大和,那么遞推公式怎么寫呢,我們先拿一個(gè)簡(jiǎn)單的例子來分析一下,比如說nums為{3, 2, 1, 5},那么我們來看我們的dp數(shù)組應(yīng)該是什么樣的,首先dp[0]=3沒啥疑問,再看dp[1]是多少呢,由于3比2大,所以我們搶第一個(gè)房子的3,當(dāng)前房子的2不搶,所以dp[1]=3,那么再來看dp[2],由于不能搶相鄰的,所以我們可以用再前面的一個(gè)的dp值加上當(dāng)前的房間值,和當(dāng)前房間的前面一個(gè)dp值比較,取較大值當(dāng)做當(dāng)前dp值,所以我們可以得到遞推公式dp[i] = max(num[i] + dp[i - 2], dp[i - 1]), 由此看出我們需要初始化dp[0]和dp[1],其中dp[0]即為num[0],dp[1]此時(shí)應(yīng)該為max(num[0], num[1]),代碼如下

          class Solution {
              public int rob(int[] nums) {
                  
                int len=nums.length;
                  if(len==0)return 0;
                  if(len==1)return nums[0];
          int dp[]=new int[len];
                  dp[0]=nums[0];dp[1]=Math.max(nums[0],nums[1]);
                  for(int i=2;i<len;i++){
                      dp[i]=Math.max(dp[i-2]+nums[i],dp[i-1]);
                  }
                  int k=0;
                  for(int i=0;i<len;i++){
                      if(dp[i]>dp[k])k=i;
                  }
                  return dp[k];
              }
          }


          好了,今天的文章就到這里,如果覺得有所收獲,請(qǐng)順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力 。

          上期推文:

          LeetCode1-180題匯總,希望對(duì)你有點(diǎn)幫助!
          LeetCode刷題實(shí)戰(zhàn)181:超過經(jīng)理收入的員工
          LeetCode刷題實(shí)戰(zhàn)182:查找重復(fù)的電子郵箱
          LeetCode刷題實(shí)戰(zhàn)183:從不訂購(gòu)的客戶
          LeetCode刷題實(shí)戰(zhàn)184:部門工資最高的員工
          LeetCode刷題實(shí)戰(zhàn)185:部門工資前三高的所有員工
          LeetCode刷題實(shí)戰(zhàn)186:翻轉(zhuǎn)字符串里的單詞 II
          LeetCode刷題實(shí)戰(zhàn)187:重復(fù)的DNA序列
          LeetCode刷題實(shí)戰(zhàn)188:買賣股票的最佳時(shí)機(jī) IV
          LeetCode刷題實(shí)戰(zhàn)189:旋轉(zhuǎn)數(shù)組
          LeetCode刷題實(shí)戰(zhàn)190:顛倒二進(jìn)制位
          LeetCode刷題實(shí)戰(zhàn)191:位1的個(gè)數(shù)
          LeetCode刷題實(shí)戰(zhàn)192:統(tǒng)計(jì)詞頻
          LeetCode刷題實(shí)戰(zhàn)193:有效電話號(hào)碼
          LeetCode刷題實(shí)戰(zhàn)194:轉(zhuǎn)置文件
          LeetCode刷題實(shí)戰(zhàn)195:第十行
          LeetCode刷題實(shí)戰(zhàn)196:刪除重復(fù)的電子郵箱
          LeetCode刷題實(shí)戰(zhàn)197:上升的溫度

          瀏覽 28
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩黄色电影免费看 | 女人18片毛片120分钟 | 国产无码动漫一区 | 国产成人夜色 | 韩国一区二区毛片 |