1. 程式人生 > >[leetcode]python3 演算法攻略-打家劫舍

[leetcode]python3 演算法攻略-打家劫舍

你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警

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

方案一:pre 始終記錄上一個最大值。

class Solution(object):
    def rob(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        pre,cur = 0, 0
        for i in nums:
            cur, pre = max(pre+i, cur), cur  # 先計算語句右邊,再賦值
        return cur

方案二:

class Solution(object):
    def rob(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if not nums:
            return 0
        if len(nums) == 1:
            return nums[0]
        if len(nums) == 2:
            return max(nums)
        res = [0] * len(nums)
        res[0] = nums[0]
        res[1] = max(nums[1], nums[0])
        for i in range(2, len(nums)):
            res[i] = max(res[i - 1], res[i - 2] + nums[i])
        return res[i]

相關推薦

[leetcode]python3 演算法-打家劫舍

你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。 給定一個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的

[leetcode]python3 演算法-二叉搜尋樹中第K小的元素

給定一個二叉搜尋樹,編寫一個函式 kthSmallest 來查詢其中第 k 個最小的元素。 說明: 你可以假設 k 總是有效的,1 ≤ k ≤ 二叉搜尋樹元素個數。 方案一:中序排序後,返回第K-1個值 class Solution(object): def k

[leetcode]python3 演算法-驗證二叉搜尋樹

給定一個二叉樹,判斷其是否是一個有效的二叉搜尋樹。一個二叉搜尋樹具有如下特徵:節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。方案一:構建一個輔助函式,把當前節點的值,傳遞給子節點,在子節點中進行比較class

[leetcode]python3 演算法-爬樓梯

假設你正在爬樓梯。需要 n 步你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢? 注意:給定 n 是一個正整數。 方案一:每一步都是前兩步和前一步的和 class Solution(object): def climbSt

[leetcode]python3 演算法-反轉整數

給定一個 32 位有符號整數,將整數中的數字進行反轉。方案一:匿名函式s用於確定x的正負性。class Solution: def reverse(self, x): """ :type x: int :rtype: i

[leetcode]python3 演算法-合併兩個有序陣列

給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列。說明:初始化 nums1 和 nums2 的元素數量分別為 m 和 n。你可以假設 nums1 有足夠的空間(空間大小大於或等於 m + n)來儲存 n

[leetcode]python3 演算法-只出現一次的數字

給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。方案一:去重求和,乘2減原def singleNumber(nums): """ :type nums: List[int] :rtype: int

[leetcode]python3 演算法-有效的字母異位詞

給定兩個字串 s 和 t ,編寫一個函式來判斷 t 是否是 s 的一個字母異位詞。方案一:s.count()比較各元素的個數class Solution: def isAnagram(self, s, t): """ :type s:

[leetcode]python3 演算法-有效的括號

給定一個只包括 '(',')','{','}','[',']' 的字串,判斷字串是否有效。 有效字串需滿足: 左括號必須用相同型別的右括號閉合。 左括號必須以正確的順序閉合。 注意空字串可被認為是有效字串。 class Solution(object):

[leetcode]python3 演算法-旋轉影象

給定一個 n × n 的二維矩陣表示一個影象。將影象順時針旋轉 90 度。方案一:先按X軸對稱旋轉, 再用zip()解壓,最後用list重組。class Solution: def rotate(self, matrix): """ :

[leetcode]python3 演算法-兩個陣列的交集 II

給定兩個陣列,寫一個方法來計算它們的交集。方案一:利用collections.Counter的&運算,一步到位,找到 最小次數 的相同元素。def intersect(nums1, nums2): """ :type nums1: List[int]

[leetcode]python3 演算法-加一

給定一個非負整數組成的非空陣列,在該數的基礎上加一,返回一個新的陣列。最高位數字存放在陣列的首位, 陣列中每個元素只儲存一個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。方案一:利用數學公式求原陣列的int形式def plusOne(digits): ""

[leetcode]python3 演算法-兩數之和

給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。方案一:利用字典,儲存檢查過的元素及其索引。def twoSum(nums, target): """ :type nums: List[

python3爬蟲(9):requests的使用

Requests 唯一的一個非轉基因的 Python HTTP 庫,人類可以安全享用。 Requests繼承了urllib的所有特性。 Requests支援HTTP連線保持和連線池,支援使用cookie保持會話,支援檔案上傳,支援自動確定響應內容的編碼,支援

程式設計師進階-八大演算法

常見的八大排序演算法,以及它們之間的關係如下所示:一、插入排序-直接插入排序      1.演算法思想:直接插入排序是一種簡單插入排序,基本思想是:把n個待排序的元素看成為一個有序表和一個無序表。開始時有序表中只包含1個元素,無序表中包含有n-1個元素,排序過程中每次從無序表

NLP之WE之CBOW&Skip-Gram:CBOW&Skip-Gram演算法概念相關論文、原理配圖、關鍵步驟詳細

NLP之WE之CBOW&Skip-Gram:CBOW&Skip-Gram演算法相關論文、原理配圖、關鍵步驟詳細攻略 CBOW&Skip-Gram演算法相關論文 CBOW 模型和Skip-Gram 模型,參考論文《Efficient Estimation of Wo

FE之DR之線性降維:LDA&PCA演算法相關論文、主要思路、關鍵步驟、程式碼實現等相關配圖之詳細

FE之DR之LDA:LDA演算法相關論文、主要思路、關鍵步驟、程式碼實現等相關配圖之詳細攻略 LDA LDA演算法相關論文、主要思路 1、LDA的缺點:強依賴均值。以下是LDA搞不定的四種情況   LDA演算法關鍵步驟 1、LDA演算法推導 &n

Keras:基於python庫之Keras建立模型演算法來實現預測功能的詳細

Keras:基於python庫之Keras建立模型演算法來實現預測功能的詳細攻略   思路分析 1、實現分類預測:通過Keras建立模型,最終得到的模型能進行兩種預測,一是判斷出類別,二是給出屬於相應類別概率。 (1)、在Keras中,可以利用predict_class()

ML之Clustering之普聚類演算法:普聚類演算法的相關論文、主要思路、關鍵步驟、程式碼實現等相關配圖之詳細

ML之Clustering之普聚類演算法:普聚類演算法的相關論文、主要思路、關鍵步驟、程式碼實現等相關配圖之詳細攻略   普聚類演算法的相關論文 1、論文推薦 Clustering by fast search and find of density peak.

ML之LS&OLS:LS&OLS演算法的簡介、論文、演算法的改進(最佳子集選擇法、前向逐步迴歸法)、程式碼實現等詳細

ML之LS&OLS:LS&OLS演算法的簡介、論文、演算法的改進(最佳子集選擇法、前向逐步迴歸法)、程式碼實現等詳細攻略   LS&OLS演算法的簡介   OLS是在大約200 年前(1806年)由高斯(Gauss)和法國數學家阿德里安-