力扣分模組練習 動態規劃 打家劫舍專題

2021-10-20 03:22:05 字數 765 閱讀 7914

參考題解:

**隨想錄

打家劫舍 ii

你是乙個專業的小偷,計畫偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都 圍成一圈 ,這意味著第乙個房屋和最後乙個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警 。

給定乙個代表每個房屋存放金額的非負整數陣列,計算你 在不觸動警報裝置的情況下 ,能夠偷竊到的最高金額。

示例 1:

輸入:nums = [2,3,2]

輸出:3

解釋:你不能先偷竊 1 號房屋(金額 = 2),然後偷竊 3 號房屋(金額 = 2), 因為他們是相鄰的。

示例 2:

輸入:nums = [1,2,3,1]

輸出:4

解釋:你可以先偷竊 1 號房屋(金額 = 1),然後偷竊 3 號房屋(金額 = 3)。偷竊到的最高金額 = 1 + 3 = 4 。

題解:

本題核心:就是頭和尾不能同時打劫,又不好用腳標直接表示成環這個概念。所以應當想到分情況討論。

情況1:把尾巴去掉,當做沒有,只考慮頭和身子。

情況2:把頭去掉。

最後比較兩種情況哪個更優。

class

solution

introbarea

(int start,

int end,vector<

int>

& nums)

};

力扣分模組練習 DFS與BFS

題意 給定乙個包含了一些 0 和 1 的非空二維陣列 grid 乙個 島嶼 是由一些相鄰的 1 代表土地 構成的組合,這裡的 相鄰 要求兩個 1 必須在水平或者豎直方向上相鄰。你可以假設 grid 的四個邊緣都被 0 代表水 包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為 0...

力扣分模組練習 二分查詢

二分查詢思路簡單,但細節很搞人。個人習慣用左閉右開的區間寫法,以下是模板 class solution else if nums middle target else return right l r重疊,這裡寫left也可以 大意 實現 int sqrt int x 函式。計算並返回 x 的平方根...

力扣分模組練習 雙指標 接雨水

11.盛最多水的容器 給你 n 個非負整數 a1,a2,an,每個數代表座標中的乙個點 i,ai 在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 i,ai 和 i,0 找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。說明 你不能傾斜容器。示例 輸入 1,8,6,2,5,4...