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

代碼隨想錄第二十一天

這篇具有很好參考價(jià)值的文章主要介紹了代碼隨想錄第二十一天。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Leetcode 530. 二叉搜索樹的最小絕對差

題目鏈接: 二叉搜索樹的最小絕對差
自己的思路:和驗(yàn)證二叉搜索樹一樣的思路!可以求每個相鄰節(jié)點(diǎn)的差值的絕對值,然后和之前的差值的絕對值進(jìn)行比較,取最小的為新的res;遞歸三部曲:1、傳入?yún)?shù):當(dāng)前節(jié)點(diǎn);2、終止條件:如果當(dāng)前節(jié)點(diǎn)為空,直接返回;3、單層遞歸邏輯:中序遍歷??!因?yàn)橹行虮闅v可以保證是遞增的,這樣就不會跳著比較,所以先遞歸左子樹,然后中節(jié)點(diǎn)和前一個節(jié)點(diǎn)求差值的絕對值和res比較,取最小值為res,然后再定義新的pre,再進(jìn)行右子樹的遍歷即可?。。?/p>

正確思路:

代碼:

class Solution {
    int res = Integer.MAX_VALUE;
    TreeNode pre;
    public int getMinimumDifference(TreeNode root) {
        if (root==null) return 0;
        getmin(root);
        return res;
    }
    
    public void getmin(TreeNode root){
        if (root==null) return;
        //左遞歸
        getmin(root.left);
        //求上一個節(jié)點(diǎn)和此節(jié)點(diǎn)的最小值和之前的差進(jìn)行比較
        if (pre!=null){
            res = Math.min(res,Math.abs(pre.val-root.val));
        }
        //重新表示上一個節(jié)點(diǎn)
        pre = root;
        //右遞歸
        getmin(root.right);
    }
}

復(fù)雜度分析
時間復(fù)雜度: O ( n ) \mathcal{O}(n) O(n)
空間復(fù)雜度: O ( 1 ) \mathcal{O}(1) O(1)

Leetcode 501. 二叉搜索樹中的眾數(shù)

題目鏈接: 二叉搜索樹中的眾數(shù)
自己的思路:沒想到?。。?!

正確思路:比較笨的方法是遍歷兩次二叉樹,然后找其中最大的值就可以;但是這里是使用了一點(diǎn)代碼技巧來處理這個問題,所以使用一次遍歷就可以;具體的思路為:二叉搜索樹一定是中序遍歷?。。?!這樣可以保證有序,主要是處理中的邏輯,我們可以定義三個變量,count用于存儲當(dāng)前結(jié)點(diǎn)的值出現(xiàn)的次數(shù),maxcount用于存儲出現(xiàn)的最多的結(jié)點(diǎn)出現(xiàn)的次數(shù),pre存儲上一個節(jié)點(diǎn);首先是計(jì)數(shù)階段:當(dāng)pre是空的時候,那也就是說node現(xiàn)在是出于葉子節(jié)點(diǎn),記錄它的count值為1,當(dāng)pre的結(jié)點(diǎn)值等于node的結(jié)點(diǎn)值的時候,說明出現(xiàn)了相同的節(jié)點(diǎn)值,則count++,當(dāng)pre的結(jié)點(diǎn)值不等于node的結(jié)點(diǎn)值時,說明出現(xiàn)了不同的節(jié)點(diǎn)值,重置count為1;然后是加入結(jié)果階段:當(dāng)count==maxcount的時候,說明當(dāng)前的次數(shù)和最大的次數(shù)相同,當(dāng)前結(jié)點(diǎn)值加入到結(jié)果集中,如果count>maxcount的時候,說明之前的maxcount并不是全局的最大,所以把之前的res中的所有元素清空,然后再加入新的結(jié)果,并且把maxcount賦值為count;遞歸三部曲:1、傳入?yún)?shù):當(dāng)前節(jié)點(diǎn);2、終止條件:當(dāng)當(dāng)前節(jié)點(diǎn)為空的時候,返回;3、單層邏輯:先左遞歸,然后處理中間節(jié)點(diǎn),然后右遞歸!?。?/p>

代碼:

class Solution {
    List<Integer> res = new ArrayList<>();
    int count = 0;
    int maxcount = 0;
    TreeNode pre;
    public int[] findMode(TreeNode root) {
        addMode(root);
        int [] re = new int[res.size()];
        for (int i =0;i<re.length;i++){
            re[i] = res.get(i);
        }
        return re;
    }
    public void addMode(TreeNode node){
        if (node==null) return;
        addMode(node.left);

        //計(jì)數(shù)階段
        if (pre==null) count=1;
        else if (pre.val==node.val){
            count++;
        }
        else count=1;

        //加結(jié)果階段
        if (count>maxcount){
            maxcount = count;
            res.clear();
            res.add(node.val);
        }else if (count==maxcount){
            res.add(node.val);
        }
        pre = node;
        addMode(node.right);
    }
}

復(fù)雜度分析
時間復(fù)雜度: O ( n ) \mathcal{O}(n) O(n)
空間復(fù)雜度: O ( 1 ) \mathcal{O}(1) O(1)

Leetcode 236. 二叉樹的最近公共祖先

題目鏈接: 二叉樹的最近公共祖先
自己的思路:沒想到?。?!

正確思路:主要是遍歷順序,使用后序遍歷出來,自底向上地返回;遞歸三部曲:1、傳入?yún)?shù):當(dāng)前結(jié)點(diǎn)、結(jié)點(diǎn)p、結(jié)點(diǎn)q;2、終止條件:當(dāng)當(dāng)前結(jié)點(diǎn)是空或者p和q時,直接返回當(dāng)前結(jié)點(diǎn)即可,因?yàn)闆]有比這個更深的結(jié)點(diǎn)了;3、單層遞歸邏輯:先左右遞歸左右子樹查找左右子樹分別對p和q的最近公共祖先,得到left和right,如果兩個都為空,說明沒找到,直接返回null,如果其中一個不為空,另一個為空,說明不為空的那個為最近公共祖先,如果兩個都不為空,則當(dāng)前節(jié)點(diǎn)為最近公共祖先?。?!
代碼:

class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        //如果當(dāng)前結(jié)點(diǎn)就是空或者p和q的話,直接返回當(dāng)前結(jié)點(diǎn)
        if (root==null||root==p||root==q){
            return root;
        }
        //遞歸左右子樹
        TreeNode left = lowestCommonAncestor(root.left,p,q);
        TreeNode right = lowestCommonAncestor(root.right,p,q);
        //如果左右兩邊都沒有,直接返回null
        if (left==null&&right==null) return null;
        //左邊有返回左邊,右邊有返回右邊
        if (left==null||right==null){
            return left==null?right:left;
        }
        //左右兩邊都有返回當(dāng)前結(jié)點(diǎn)
        return root;
    }
}

復(fù)雜度分析
時間復(fù)雜度: O ( n ) \mathcal{O}(n) O(n)
空間復(fù)雜度: O ( 1 ) \mathcal{O}(1) O(1)文章來源地址http://www.zghlxwxcb.cn/news/detail-597592.html

到了這里,關(guān)于代碼隨想錄第二十一天的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 代碼隨想錄圖論 第一天 | 797.所有可能的路徑 200. 島嶼數(shù)量

    代碼隨想錄圖論 第一天 | 797.所有可能的路徑 200. 島嶼數(shù)量 一、797.所有可能的路徑 題目鏈接:https://leetcode.cn/problems/all-paths-from-source-to-target/ 思路:求從0到n-1的所有路徑,終止條件是當(dāng)前節(jié)點(diǎn)為n-1。本題圖的結(jié)構(gòu)是group[][],group[x]表示x節(jié)點(diǎn)所能到達(dá)的所有節(jié)點(diǎn)的集合,深度

    2024年02月08日
    瀏覽(32)
  • 【一天三道算法題】代碼隨想錄——Day15(困難題只有一道)

    一. 滑動窗口最大值 題目鏈接:力扣 思路: ????????這道題我認(rèn)為最難的是編程語言本身并沒有一個可以讓你完全直接開始使用的一個數(shù)據(jù)結(jié)構(gòu),也就是說要自己造輪子。并且為了盡可能的減少維護(hù)元素的個數(shù)我們要學(xué)會去在能實(shí)現(xiàn)功能的前提下,維護(hù)盡可能少的數(shù)組元

    2024年02月15日
    瀏覽(93)
  • 代碼隨想錄第二十二天

    題目鏈接 : 二叉搜索樹的最近公共祖先 自己的思路 :乍一看和二叉樹的最近公共祖先類似,使用那個題的代碼確實(shí)可以寫出來,但是沒有利用到二叉搜索樹的性質(zhì);我們可以找出p和q結(jié)點(diǎn)值的較大者和較小者,遍歷整個二叉樹,如果出現(xiàn)了某個結(jié)點(diǎn)值位于兩者之間,就是我們

    2024年02月16日
    瀏覽(25)
  • 代碼隨想錄第一天 | LeetCode704.二分查找,LeetCode 27.移除元素

    數(shù)組理論基礎(chǔ)要點(diǎn): 數(shù)組也是數(shù)據(jù)結(jié)構(gòu)的一種, 是存放在連續(xù)內(nèi)存空間上的相同類型數(shù)據(jù)的集合。 數(shù)組注意點(diǎn): 數(shù)組下標(biāo)都是從0開始的。 數(shù)組內(nèi)存空間的地址是連續(xù)的。 因?yàn)樯鲜鰞牲c(diǎn), 數(shù)組的在內(nèi)存空間的地址是連續(xù)的,所以我們在刪除或者增添元素的時候,就難免要

    2024年02月08日
    瀏覽(27)
  • 【代碼隨想錄-Leetcode第二題:27.移除元素】

    給你一個數(shù)組 nums 和一個值 val,你需要 原地 移除所有數(shù)值等于 val 的元素,并返回移除后數(shù)組的新長度。 不要使用額外的數(shù)組空間,你必須僅使用 O(1) 額外空間并 原地 修改輸入數(shù)組。 元素的順序可以改變。你不需要考慮數(shù)組中超出新長度后面的 樣例:示例 1: 解釋:函數(shù)

    2024年02月14日
    瀏覽(21)
  • node 第二十一天 webpack 初見

    為什么需要學(xué)習(xí)(了解)webpack webpack是前端工程化的基石,webpack又是基于node進(jìn)行文件打包bundle,所以作為前端起手學(xué)習(xí)node服務(wù)端開發(fā),同時學(xué)習(xí)webpack是很有必要的。 隨著vite的出現(xiàn),vue這一脈可能也許不再需要學(xué)習(xí)webpack了,但是需要知道的是, 打包一定是前端工程化繞不

    2024年01月16日
    瀏覽(26)
  • 秒懂百科,C++如此簡單丨第二十一天:棧和隊(duì)列

    秒懂百科,C++如此簡單丨第二十一天:棧和隊(duì)列

    目錄 前言 Everyday English 棧(Stack) 圖文解釋 實(shí)現(xiàn)添加刪除元素 實(shí)現(xiàn)查看清空棧 完整代碼 運(yùn)行示例 棧的選擇題 隊(duì)列(Queue) 圖文解釋 隊(duì)列的基本用法 完整代碼? 運(yùn)行結(jié)果? 隊(duì)列的好處? 結(jié)尾? 今天我們將學(xué)習(xí)兩個新的數(shù)據(jù)結(jié)構(gòu)——棧和隊(duì)列。 A friend in need is a friend indeed

    2024年02月20日
    瀏覽(24)
  • 【三十天精通Vue 3】第二十一天 Vue 3的安全性詳解

    【三十天精通Vue 3】第二十一天 Vue 3的安全性詳解

    ?創(chuàng)作者:陳書予 ??個人主頁:陳書予的個人主頁 ??陳書予的個人社區(qū),歡迎你的加入: 陳書予的社區(qū) ??專欄地址: 三十天精通 Vue 3

    2024年02月01日
    瀏覽(22)
  • 【致敬未來的攻城獅計(jì)劃】— 連續(xù)打卡第二十一天:RA2E1_UART —— 串口控制LED亮滅

    【致敬未來的攻城獅計(jì)劃】— 連續(xù)打卡第二十一天:RA2E1_UART —— 串口控制LED亮滅

    1. 連續(xù)打卡第一天:提前對CPK_RA2E1是瑞薩RA系列開發(fā)板的初體驗(yàn),了解一下 2. 開發(fā)環(huán)境的選擇和調(diào)試(從零開始,加油) 3. 欲速則不達(dá),今天是對RA2E1 基礎(chǔ)知識的補(bǔ)充學(xué)習(xí)。 4. e2 studio 使用教程 5. Keil配置使用(使用 RASC 生成 Keil 工程) 6. Keil配置使用(使用 RASC 生成 Keil 工程

    2024年02月02日
    瀏覽(26)
  • 代碼隨想錄刷題

    代碼隨想錄刷題

    704. 二分查找 27. 移除元素

    2024年01月25日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包