leepcode(斐波那契數列與float("inf")無窮大)解析

来源:https://www.cnblogs.com/raynduan/archive/2019/05/17/10883705.html
-Advertisement-
Play Games

斐波那契數列、(引用float(‘inf’)無窮大的特性來比對,從而提取數組中的最小值)float(“inf”)正無窮大 float(“-inf”)負無窮大 ...


12、加一

給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。

最高位數字存放在數組的首位, 數組中每個元素只存儲一個數字。

你可以假設除了整數 0 之外,這個整數不會以零開頭。

示例 1:

輸入: [1,2,3]
輸出: [1,2,4]
解釋: 輸入數組表示數字 123。

解答:

a = ''
lis1 = []  ##定義一個空字元串和一個空列表
for i in digits:  
    a += str(i)  ##將列表裡的的整數轉換成字元串,並將字元串添加進空字元串a里
b = int(a) + 1  ##在將字元串a轉換成整數,進行加法運算,並賦值給b。
for j in str(b):    ##將整數組b進行字元串轉換,並拿出每個字元串
    lis1.append(int(j))  ##將字元串轉換成整數,並添加進lis1的列表裡
return lis1

13 、爬樓梯(該題用斐波那契數列求解)

假設你正在爬樓梯。需要 n 階你才能到達樓頂。

每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?

註意:給定 n 是一個正整數。

示例 1:

輸入: 2
輸出: 2
解釋: 有兩種方法可以爬到樓頂。
1.  1 階 + 1 階
2.  2 階
class Solution:
    def climbStairs(self, n: int) -> int:
        if n == 1:
            return 1
        elif n == 2:
            return 2
        else:
            a = 1
            b = 2           
            for i in range(n-2):                
                a,b = b,a+b
            return b

補充點: 斐波那契數列

數列:1,1,2,3,5,8,13,21,34…n被稱為斐波那契數列

特點:第一個、第二個數為1,從第三個開始,該值等於前面兩個數之和。

當n>=2時,其值只與其前面兩個數的值有關,所在在只需求出第n個值的時候,我們沒必要浪費空間去存儲在n前2個數之前的值。

14、合併兩個有序數組

給定兩個有序整數數組 nums1nums2,將 nums2 合併到 nums1使得 num1 成為一個有序數組。

說明:

  • 初始化 nums1nums2 的元素數量分別為 mn
  • 你可以假設 nums1 有足夠的空間(空間大小大於或等於 m + n)來保存 nums2 中的元素。

示例:

輸入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6],       n = 3

輸出: [1,2,2,3,5,6]

解答:

if n == 0: ##當n=0時,數組nums2為空,兩組合併只有數組nums1的元素。
    nums1 = nums1
j = 0 and j <n  ##新設一個變數j
for i in range(m,len(nums1)): ##m代表是數組nums1的元素個數,len(nums1)代表數組nums1的索引值長度,取值範圍設置到m,len(nums1)表示,可以計算出nums1中空值0的數量。
    if nums1[i] == 0:
        nums1[i] = nums2[j] ##每當nums1[i]等於0,就將nums2賦值給nums1
        j +=1
        if j == n :
            break
nums1.sort()  ##最後進行排序

15、買賣股票的最佳時機(用float(“inf”)無窮大來解答)

給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。

如果你最多只允許完成一筆交易(即買入和賣出一支股票),設計一個演算法來計算你所能獲取的最大利潤。

註意你不能在買入股票前賣出股票。

示例 1:

輸入: [7,1,5,3,6,4]
輸出: 5
解釋: 在第 2 天(股票價格 = 1)的時候買入,在第 5 天(股票價格 = 6)的時候賣出,最大利潤 = 6-1 = 5 。
     註意利潤不能是 7-1 = 6, 因為賣出價格需要大於買入價格。

示例 2:

輸入: [7,6,4,3,1]
輸出: 0
解釋: 在這種情況下, 沒有交易完成, 所以最大利潤為 0。

解答:(引用float(‘inf’)無窮大的特性來比對,從而提取數組中的最小值)float(“inf”)正無窮大 float(“-inf”)負無窮大

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        j = 0  
        l = float('inf') ##float('inf')表示正無窮大
        for i in prices:
            l = min(l,i) ##取數組中i與正無窮大的最小值
            j = max(j,i-l)  ##先用i減去每次迴圈的最小值得到每次迴圈的最大值
        return j

16 買賣股票的最佳時機2

給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。

設計一個演算法來計算你所能獲取的最大利潤。你可以儘可能地完成更多的交易(多次買賣一支股票)。

註意:你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。

示例 1:

輸入: [7,1,5,3,6,4]
輸出: 7
解釋: 在第 2 天(股票價格 = 1)的時候買入,在第 3 天(股票價格 = 5)的時候賣出, 這筆交易所能獲得利潤 = 5-1 = 4 。
     隨後,在第 4 天(股票價格 = 3)的時候買入,在第 5 天(股票價格 = 6)的時候賣出, 這筆交易所能獲得利潤 = 6-3 = 3 。

示例 2:

輸入: [1,2,3,4,5]
輸出: 4
解釋: 在第 1 天(股票價格 = 1)的時候買入,在第 5 天 (股票價格 = 5)的時候賣出, 這筆交易所能獲得利潤 = 5-1 = 4 。
     註意你不能在第 1 天和第 2 天接連購買股票,之後再將它們賣出。
     因為這樣屬於同時參與了多筆交易,你必須在再次購買前出售掉之前的股票。

解答:(既然可以多次交易,那麼只要每次交易都有利潤,那麼就能買賣,我們就可以求利潤>0的總和)

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        j = 0
        for i in range(len(prices)-1): ## 因為索引超出範圍,所以要減去一個1
            if prices[i+1] - prices[i]>0:  ##如果每次買賣的利潤>0 
                j += prices[i+1] -prices[i]  ##將每次的利潤加在一塊
        return (j)

17、只出現一次的數字

給定一個非空整數數組,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。

說明:

你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?

示例 1:

輸入: [2,2,1]
輸出: 1

示例 2:

輸入: [4,1,2,1,2]
輸出: 4

解答:**題目中提到只有不重覆的元素出現一次外,所有元素均出現兩次,那麼先用集合去重,剩下的元素都只有一次,再把這個集合*2,那麼該集合的總和就比原先的數組得總和多了一個不重覆元素的值,這個值就是我們所需要的。**

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        return((sum(set(nums)))*2 -sum(nums))

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 如何入門Python爬蟲?爬蟲原理及過程詳解,“入門”是良好的動機,但是可能作用緩慢。如果你手裡或者腦子裡有一個項目,那麼實踐起來你會被目標驅動,而不會像學習模塊一樣慢慢學習。 ...
  • 13.1 偏函數(partial function) 13.1.1 需求 -> 思考 一個集合val list = List(1,2,3,4,"abc"),完成如下要求 1) 將集合list中的所有數字+1,並返回一個新的集合 2) 要求忽略掉非數字的元素,即返回的新的集合形式為(2,3,4,5) ...
  • 靜態static 如果一個成員變數使用了static關鍵字,那麼這個變數不再屬於對象自己,而是屬於所在的類,多個對象共用同一份數據 靜態static 關鍵字修飾成員變數 靜態static關鍵字修飾成員方法 一旦使用static修飾成員方法,那麼這就成為了靜態方法,靜態方法不屬於對象,而是屬於類的 如 ...
  • 硬體記憶體架構? Java記憶體模型? 記憶體間交互的操作有哪些? 原子性、可見性、有序性? 先行發生原則有哪些? ...
  • hibernate介紹 hibernate是一個開源的輕量級的框架, hibernate框架應用在javaee三層結構中的dao層框架,在dao層對資料庫進行crud操作,使用hibernate框架實現crud操作; hibernate底層就是jdbc,hibernate對jdbc進行了封裝;使用h ...
  • Recently, I was made a service which can provide a simple way to get best model. so, i spent lot of time to read source code of auto-sklearn, auto-skl ...
  • 1、JAVA 語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什麼意義?在try 塊中可以拋出異常嗎? 答:Java 通過面向對象的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的介面。在Java 中,每個異常都是一個對象,它是Throwa ...
  • 第1題:動態載入又對及時性要求很高怎麼處理? 如何知道一個網站是動態載入的數據? 用火狐或者谷歌瀏覽器 打開你網頁,右鍵查看頁面源代碼,ctrl +F 查詢輸入內容,源代碼裡面並沒有這個值,說明是動態載入數據。 1. Selenium+Phantomjs 2. 儘量不使用 sleep 而使用 Web ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...