国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

從零開始的力扣刷題記錄-第八十七天

這篇具有很好參考價值的文章主要介紹了從零開始的力扣刷題記錄-第八十七天。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

129. 求根節(jié)點到葉節(jié)點數字之和-中等

題目描述:
給你一個二叉樹的根節(jié)點 root ,樹中每個節(jié)點都存放有一個 0 到 9 之間的數字。
每條從根節(jié)點到葉節(jié)點的路徑都代表一個數字:
例如,從根節(jié)點到葉節(jié)點的路徑 1 -> 2 -> 3 表示數字 123 。
計算從根節(jié)點到葉節(jié)點生成的 所有數字之和 。
葉節(jié)點 是指沒有子節(jié)點的節(jié)點。

題解:
簡單的深度優(yōu)先搜索就可以解決

代碼(Go):

func sumNumbers(root *TreeNode) int {
    return dfs(root,0)
}

func dfs(root *TreeNode,sum int) int {
    if root == nil {
        return sum
    }
    sum = sum * 10 + root.Val
    NewSum := 0
    if root.Left == nil && root.Right == nil{
        return sum
    }
    if root.Left != nil{
        NewSum += dfs(root.Left,sum)
    }
    if root.Right != nil{
        NewSum += dfs(root.Right,sum)
    }
    return NewSum
}

130. 被圍繞的區(qū)域-中等

題目描述:
給你一個 m x n 的矩陣 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 圍繞的區(qū)域,并將這些區(qū)域里所有的 ‘O’ 用 ‘X’ 填充。

題解:
沒有被包圍的O一定與邊界上的O相連,所以可以反過來從邊界上的O開始找到所有相連的O并標記,最后遍歷矩陣,被標記的O變回O,沒有被標記的O改為X

代碼(Go):

func solve(board [][]byte)  {
    for i := 0;i < len(board);i++{
        for j := 0;j < len(board[0]);j++{
            if (i == 0 || j == 0 || i == len(board) - 1 || j == len(board[0]) - 1) && board[i][j] == 'O'{
                checkout(board,i,j)
                board[i][j] = '1'
            }
        }
    }
    for i := 0;i < len(board);i++{
        for j := 0;j < len(board[0]);j++{
            if board[i][j] == '1'{
                board[i][j] = 'O'
            }else{
                board[i][j] = 'X'
            }
        }
    }
    return
}

func checkout(board [][]byte,x int,y int) {
    if x - 1 >= 0 && board[x - 1][y] == 'O'{
        board[x - 1][y] = '1'
        checkout(board,x - 1,y)
    }
    if y - 1 >= 0 &&board[x][y - 1] == 'O'{
        board[x][y - 1] = '1'
        checkout(board,x,y - 1)
    }
    if x + 1 < len(board) && board[x + 1][y] == 'O'{
        board[x + 1][y] = '1'
        checkout(board,x + 1,y)
    }
    if y + 1 < len(board[0]) && board[x][y + 1] == 'O'{
        board[x][y + 1] = '1'
        checkout(board,x,y + 1)
    }
    return
}

437. 路徑總和 III-中等

題目描述:
給定一個二叉樹的根節(jié)點 root ,和一個整數 targetSum ,求該二叉樹里節(jié)點值之和等于 targetSum 的 路徑 的數目。
路徑 不需要從根節(jié)點開始,也不需要在葉子節(jié)點結束,但是路徑方向必須是向下的(只能從父節(jié)點到子節(jié)點)。

題解:
代碼寫麻煩了,官方題解更容易懂。我的思路是用一個flag變量標記此節(jié)點是否必選,如果此節(jié)點的父節(jié)點已經被選中到路徑中則該節(jié)點必須被選擇,然后就是常規(guī)的深度優(yōu)先搜索統(tǒng)計即可

代碼(Go):

func pathSum(root *TreeNode, targetSum int) int {
    return search(root,targetSum,0)
}

func search(root *TreeNode,targetSum int,flag int) int {
    if root == nil{
        return 0
    }
    if root.Val == targetSum && flag == 0{
        return 1 + search(root.Left,0,1) + search(root.Right,0,1) + search(root.Left,targetSum,0) + search(root.Right,targetSum,0)
    }else if root.Val == targetSum && flag == 1{
        return 1 + search(root.Left,0,1) + search(root.Right,0,1)
    }else if flag == 0{
        return search(root.Left,targetSum,0) + search(root.Right,targetSum,0) + search(root.Left,targetSum - root.Val,1) + search(root.Right,targetSum - root.Val,1)
    }else{
        return search(root.Left,targetSum - root.Val,1) + search(root.Right,targetSum - root.Val,1)
    }
}

376. 擺動序列-中等

題目描述:
如果連續(xù)數字之間的差嚴格地在正數和負數之間交替,則數字序列稱為 擺動序列 。第一個差(如果存在的話)可能是正數或負數。僅有一個元素或者含兩個不等元素的序列也視作擺動序列。
例如, [1, 7, 4, 9, 2, 5] 是一個 擺動序列 ,因為差值 (6, -3, 5, -7, 3) 是正負交替出現(xiàn)的。
相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是擺動序列,第一個序列是因為它的前兩個差值都是正數,第二個序列是因為它的最后一個差值為零。
子序列 可以通過從原始序列中刪除一些(也可以不刪除)元素來獲得,剩下的元素保持其原始順序。
給你一個整數數組 nums ,返回 nums 中作為 擺動序列 的 最長子序列的長度 。

題解:
子序列問題直接想到動態(tài)規(guī)劃,整體思路和最長遞增子序列問題基本一致,但是因為每次判斷dp[i]時都需要和前面所有的位置依次對比,所以時間復雜度是O(n2),官方題解使用了兩個dp數組分別表示最后一個元素是上升狀態(tài)的上升數組和最后一個元素是下降狀態(tài)的下降數組,兩個數組的第n個狀態(tài)都可以通過兩個數組的n-1個狀態(tài)共同得出,這樣既使時間復雜度降到了O(n),也使空間復雜度降到了O(1),具體可以看下官方題解

代碼(Go):

func wiggleMaxLength(nums []int) int {
    dp := make([]int,len(nums))
    sign := make([]int,len(nums))
    for i := 0;i < len(nums);i++{
        if i == 0{
            dp[i] = 1
            sign[i] = 0
        }else if i == 1{
            if nums[i] > nums[0]{
                sign[i] = 1
                dp[i] = 2
            }else if nums[i] < nums[0]{
                sign[i] = -1
                dp[i] = 2
            }else{
                sign[i] = 0
                dp[i] = 1
            }
        }else{
            max := 0
            for j := 0;j < i;j++{
                if sign[j] == 1 && nums[i] < nums[j]{
                    if dp[j] + 1 > max{
                        max = dp[j] + 1
                        sign[i] = -1
                    }
                }else if sign[j] == -1 && nums[i] > nums[j]{
                    if dp[j] + 1 > max{
                        max = dp[j] + 1
                        sign[i] = 1
                    }
                }else if sign[j] == 0{
                    if dp[j] + 1 > max && nums[i] > nums[j]{
                        max = dp[j] + 1
                        sign[i] = 1
                    }else if dp[j] + 1 > max && nums[i] < nums[j]{
                        max = dp[j] + 1
                        sign[i] = -1
                    }
                }
            }
            dp[i] = max
        }
    }
    max := 0
    for i := 0;i < len(nums);i++{
        if dp[i] > max{
            max = dp[i]
        }
    }
    return max
}

總結

終于忙完了一個大階段,正式回歸!但是因為現(xiàn)在還要上課而且兩道簡單兩道中等現(xiàn)在變成了四道中等,所以不一定能保證每天全靠自己做完四道題了,只能說盡量完成,如果時間不夠的話就只能把沒解出來看了題解的題也搬上來了文章來源地址http://www.zghlxwxcb.cn/news/detail-727299.html

到了這里,關于從零開始的力扣刷題記錄-第八十七天的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 從零開始的力扣刷題記錄-第五十八天

    題目描述: 給你一個 不包含 任何零的整數數組 nums ,找出自身與對應的負數都在數組中存在的最大正整數 k 。 返回正整數 k ,如果不存在這樣的整數,返回 -1 。 題解: 哈希表存儲負數,再遍歷nums對每一個正數去哈希表中查找是否存在對應的負數。存在就更新返回值 代碼

    2024年02月09日
    瀏覽(23)
  • 從零開始的力扣刷題記錄-第七十二天

    題目描述: 給你一個整數數組 nums ,它包含 2 * n 個整數。 你需要將 nums 劃分成 n 個數對,滿足: 每個元素 只屬于一個 數對。 同一數對中的元素 相等 。 如果可以將 nums 劃分成 n 個數對,請你返回 true ,否則返回 false 題解: 哈希表統(tǒng)計各元素數量,如果有不能被2整除的就

    2024年02月11日
    瀏覽(24)
  • 從零開始的力扣刷題記錄-第三十九天

    題目描述: 給定一個 無重復元素 的 有序 整數數組 nums 。 返回 恰好覆蓋數組中所有數字 的 最小有序 區(qū)間范圍列表 。也就是說,nums 的每個元素都恰好被某個區(qū)間范圍所覆蓋,并且不存在屬于某個范圍但不屬于 nums 的數字 x 。 列表中的每個區(qū)間范圍 [a,b] 應該按如下格式輸

    2024年02月06日
    瀏覽(26)
  • 從零開始的力扣刷題記錄-第五十一天

    題目描述: 給你一棵二叉搜索樹的 root ,請你 按中序遍歷 將其重新排列為一棵遞增順序搜索樹,使樹中最左邊的節(jié)點成為樹的根節(jié)點,并且每個節(jié)點沒有左子節(jié)點,只有一個右子節(jié)點。 題解: 中序遍歷存儲節(jié)點后按順序連接即可 代碼(Go): 題目描述: 小扣在秋日市集發(fā)

    2024年02月08日
    瀏覽(25)
  • 從零開始的力扣刷題記錄-第六十四天

    題目描述: 給你一個下標從 0 開始的整數數組 nums 。在一步操作中,你可以執(zhí)行以下步驟: 從 nums 選出 兩個 相等的 整數 從 nums 中移除這兩個整數,形成一個 數對 請你在 nums 上多次執(zhí)行此操作直到無法繼續(xù)執(zhí)行。 返回一個下標從 0 開始、長度為 2 的整數數組 answer 作為答

    2024年02月11日
    瀏覽(24)
  • 從零開始的力扣刷題記錄-第四十四天

    題目描述: 和諧數組是指一個數組里元素的最大值和最小值之間的差別 正好是 1 。 現(xiàn)在,給你一個整數數組 nums ,請你在所有可能的子序列中找到最長的和諧子序列的長度。 數組的子序列是一個由數組派生出來的序列,它可以通過刪除一些元素或不刪除元素、且不改變其余

    2024年02月07日
    瀏覽(22)
  • 從零開始的力扣刷題記錄-第六十一天

    題目描述: 給定由一些正數(代表長度)組成的數組 nums ,返回 由其中三個長度組成的、面積不為零的三角形的最大周長 。如果不能形成任何面積不為零的三角形,返回 0。 題解: 排序后從后往前遍歷,取最大的三個邊,如果滿足兩邊之和大于第三邊則返回,否則整體向前

    2024年02月09日
    瀏覽(25)
  • LeetCode 刷題記錄——從零開始記錄自己一些不會的

    LeetCode 刷題記錄——從零開始記錄自己一些不會的

    1. 最多可以摧毀的敵人城堡數目 題意 思路 兩層循環(huán),太low了 用一個變量記錄前一個位置 代碼 2. 到達終點的數字 題意 思路 代碼 3. 單詞的壓縮編碼 題意 思路 代碼 思路2 去找到是否不同的單詞具有相同的后綴,我們可以將其反序之后插入字典樹中。例如,我們有 “time”

    2024年02月09日
    瀏覽(46)
  • 力扣刷題:刪除重復元素

    當處理排序數組時,刪除重復元素是一個常見的問題。首先,我們來看一下如何解決這個問題,然后再進一步討論如何處理允許最多重復兩次的情況。 問題描述:給定一個已排序的數組,刪除重復的元素,使得每個元素只出現(xiàn)一次,并返回新的長度。 使用雙指針方法。一個

    2024年02月13日
    瀏覽(23)
  • 力扣刷題 - 數組篇

    力扣刷題 - 數組篇

    https://leetcode.cn/problems/max-consecutive-ones/ 暴力解法: 定義一個變量來統(tǒng)計是否連續(xù) https://leetcode.cn/problems/teemo-attacking/ 暴力解法: 記錄每次中的開始時間與結束時間, 然后如果下一次中毒的是在結束時間之前, 就去更新開始時間(讓它加上這個持續(xù)時間減去結束時間),如果是在之后

    2024年02月16日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包