代碼隨想錄算法訓練營第十六天

LeetCode題目:

  • 530. 二叉搜索樹的最小絕對差
  • 501. 二叉搜索樹中的眾數
  • 236. 二叉樹的最近公共祖先
  • 3272. 統計好整數的數目(每日一題)

其他:

今日總結
往期打卡


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

跳轉: 530. 二叉搜索樹的最小絕對差

學習: 代碼隨想錄公開講解

問題:

給你一個二叉搜索樹的根節點 root ,返回 樹中任意兩不同節點值之間的最小差值

差值是一個正數,其數值等于兩值之差的絕對值。
在這里插入圖片描述

思路:

已知,二叉搜索樹中序遍歷是非遞減序列,所以只需要中序遍歷一一求差值,并記錄最小即可.
因為涉及到兩步操作,所以可以先獲得數組再操作數組,或者使用雙指針.

復雜度:

  • 時間復雜度: O ( n ) O(n) O(n)
  • 空間復雜度: O ( 1 ) O(1) O(1)(不計遞歸棧占用)

代碼(雙指針):

class Solution {int pre=-1;int min=Integer.MAX_VALUE;public void getDiff(TreeNode root){if(root==null) return ;getDiff(root.left);if(pre!=-1) min = Math.min(root.val-pre,min);pre = root.val;getDiff(root.right);}public int getMinimumDifference(TreeNode root) {getDiff(root);return min;}
}

501. 二叉搜索樹中的眾數

跳轉:501. 二叉搜索樹中的眾數

學習: 代碼隨想錄公開講解

問題:

給你一個含重復值的二叉搜索樹(BST)的根節點 root ,找出并返回 BST 中的所有 眾數(即,出現頻率最高的元素)。

如果樹中有不止一個眾數,可以按 任意順序 返回。

假定 BST 滿足如下定義:

  • 結點左子樹中所含節點的值 小于等于 當前節點的值
  • 結點右子樹中所含節點的值 大于等于 當前節點的值
  • 左子樹和右子樹都是二叉搜索樹

在這里插入圖片描述

思路:

這題還是利用二叉搜索樹的性質,非遞減序列可以方便統計,每次統計的結尾部分做一次比較判斷集合添加與清空即可;
設計前后比較,還是可以使用雙指針一遍遍歷解決.

復雜度:

  • 時間復雜度: O ( n ) O(n) O(n)
  • 空間復雜度: O ( n ) O(n) O(n)

代碼雙指針:

class Solution {int max = 0;int curFrequency = 0;int pre = -100001;int[] maximumNodeValues;int count = 0;void traverse(TreeNode root) {if (root == null)return;traverse(root.left);if (root.val == pre)curFrequency++;else {if (curFrequency > max) {max = curFrequency;maximumNodeValues = new int[10000];count = 0;}if (curFrequency == max) {maximumNodeValues[count++] = pre;}curFrequency = 1;pre = root.val;}traverse(root.right);}public int[] findMode(TreeNode root) {maximumNodeValues = new int[10000];traverse(root);if (curFrequency > max) {max = curFrequency;maximumNodeValues = new int[10000];count = 0;}if (curFrequency == max) {maximumNodeValues[count++] = pre;}int[] ans = new int[count];System.arraycopy(maximumNodeValues, 0, ans, 0, count);return ans;}
}

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

跳轉:236. 二叉樹的最近公共祖先

學習: 代碼隨想錄公開講解

問題:

給定一個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。

百度百科中最近公共祖先的定義為:“對于有根樹 T 的兩個節點 p、q,最近公共祖先表示為一個節點 x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大(一個節點也可以是它自己的祖先)。”

在這里插入圖片描述

思路:

返回第一次左右節點分別包含q,p或者上層的q或p
所以這題使用后序遍歷比較合適

復雜度:

  • 時間復雜度: O ( n ) O(n) O(n)
  • 空間復雜度: O ( 1 ) O(1) O(1)

代碼:

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root == null || root == p || root == q) {return root;}TreeNode left = lowestCommonAncestor(root.left,p,q);TreeNode right = lowestCommonAncestor(root.right,p,q);if(left==null&&right==null) return null;if(left!=null&&right==null) return left;if(right!=null&&left==null) return right;return root;}
}

3272. 統計好整數的數目(每日一題)

跳轉: 3272. 統計好整數的數目

學習: 靈茶山艾府公開講解

問題:

給你兩個 整數 nk

如果一個整數 x 滿足以下條件,那么它被稱為 k 回文 整數 。

  • x 是一個 回文整數 。
  • x 能被 k 整除。

如果一個整數的數位重新排列后能得到一個 k 回文整數 ,那么我們稱這個整數為 整數。比方說,k = 2 ,那么 2020 可以重新排列得到 2002 ,2002 是一個 k 回文串,所以 2020 是一個好整數。而 1010 無法重新排列數位得到一個 k 回文整數。

請你返回 n 個數位的整數中,有多少個 整數。

注意 ,任何整數在重新排列數位之前或者之后 都不能 有前導 0 。比方說 1010 不能重排列得到 101 。

思路:

回文子串可以用左半邊遍歷的方式獲得

題目中的好整數是調整之后的,為了不重復,需要哈希記錄等價的值,可以按各位數字排序后記錄字符串

每一個回文數會有多種排序,其排序的公式如下
cntn是數字n的個數
在這里插入圖片描述

復雜度:

  • 時間復雜度: O ( n l o g n ) O(nlogn) O(nlogn)
  • 空間復雜度: O ( n ) O(n) O(n)

代碼:

class Solution {public long countGoodIntegers(int n, int k) {int[] factorial = new int[n+1];factorial[0] = 1;for(int i=1;i<=n;i++){factorial[i] = factorial[i-1]*i;}long ans = 0;Set<String> vis = new HashSet<>();int base = (int)Math.pow(10,(n-1)/2);for(int i = base;i<base*10;i++){String s = Integer.toString(i);s += new StringBuilder(s).reverse().substring(n%2);if(Long.parseLong(s)%k>0) continue;char[] sortedS = s.toCharArray();Arrays.sort(sortedS);if(!vis.add(new String(sortedS))) continue;int[] cnt = new int[10];for(char c:sortedS){cnt[c-'0']++;}int res = (n-cnt[0])*factorial[n-1];for(int c:cnt){res /= factorial[c];}ans+=res;}return ans;}
}

總結

今天學習了回文數以及二叉樹應用雙指針跨節點操作

往期打卡

代碼隨想錄算法訓練營第十五天

代碼隨想錄算法訓練營第十四天

代碼隨想錄算法訓練營第十三天

代碼隨想錄算法訓練營第十二天

代碼隨想錄算法訓練營第十一天

代碼隨想錄算法訓練營周末二

代碼隨想錄算法訓練營第十天

代碼隨想錄算法訓練營第九天

代碼隨想錄算法訓練營第八天

代碼隨想錄算法訓練營第七天

代碼隨想錄算法訓練營第六天

代碼隨想錄算法訓練營第五天

代碼隨想錄算法訓練營周末一

代碼隨想錄算法訓練營第四天

代碼隨想錄算法訓練營第三天

代碼隨想錄算法訓練營第二天

代碼隨想錄算法訓練營第一天

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/78737.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/78737.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/78737.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于雙閉環PID控制器的永磁同步電機控制系統匝間故障Simulink仿真

歡迎微?關注“電擊小子程高興的MATLAB小屋”獲取巨額優惠 1.模型簡介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2013Rb&#xff09;軟件。建議采用matlab2013 Rb及以上版本打開。&#xff08;若需要其他版本可聯系代為轉換&#xff0c;高于該版本的matlab均可正…

02-libVLC的視頻播放器:播放音視頻文件以及網絡流

libvlc_new(0, nullptr)功能:創建并初始化libVLC的核心實例,是使用所有libVLC功能的前提。 參數:第一個參數:參數數量(通常設為0)第二個參數:參數列表(通常為nullptr,表示使用默認配置)返回值:成功返回libvlc_instance_t*指針,失敗返回nullptr。注意事項:可通過參…

2025藍橋杯省賽C++B組解題思路

由于題面還沒出來&#xff0c;現在先口胡一下思路 填空題直接打表找規律或者亂搞一下就能出&#xff0c;從大題開始說。 1&#xff0c;題意&#xff1a; 給你一個數組&#xff0c;這個數組里有幾個數可以被一個連續遞增的數字區間求和得出 思路&#xff1a;詐騙題&#xff0c;顯…

防止郵件偽造的策略 SPF 介紹

SPF是Sender Policy Framework的縮寫&#xff0c;即發件人策略框架&#xff0c;是一種用于防止電子郵件偽造的技術&#xff0c;用來驗證發件人郵箱域名的真實性。以下是關于它的詳細說明&#xff1a; 1. 定義與作用 SPF是一種電子郵件驗證系統&#xff0c;它通過在域名的DNS記…

JavaScript Symbol與BigInt

目錄 Symbol類型 一、Symbol 的核心特性 1. 唯一性 2. 不可變性 3. 不可枚舉性 二、創建 Symbol 1. 基礎創建 2. 全局 Symbol 注冊表 三、Symbol 作為對象屬性 1. 定義 Symbol 屬性 2. 遍歷 Symbol 屬性 四、內置 Symbol 值 五、實際應用場景 1. 避免屬性名沖突 …

AI Agent工程師認證-學習筆記(3)——【多Agent】MetaGPT

學習鏈接:【多Agent】MetaGPT學習教程 源代碼鏈接(覺得很好,star一下):GitHub - 基于MetaGPT的多智能體入門與開發教程 MetaGPT鏈接:GitHub - MetaGPT 前期準備 1、獲取MetaGPT (1)使用pip獲取MetaGPT pip install metagpt==0.6.6#或者在國內加速安裝鏡像 #pip in…

【leetcode hot 100 416】分割等和子集

解法一&#xff1a;&#xff08;動態規劃&#xff09;①定義&#xff1a;dp[i]表示是否可以在nums找到元素之和為i&#xff0c;dp[sum/21] ②初始狀態&#xff1a;dp[0]true;dp[i]false ③狀態轉移方程&#xff1a;dp[i] dp[i] || dp[i - num]; class Solution {public boole…

高中數學聯賽模擬試題精選第2套幾何題(改編)

在 △ A B C \triangle ABC △ABC 中, 點 M M M 是邊 A C AC AC 的中點. 在線段 A M AM AM, C M CM CM 上分別取點 P P P, Q Q Q, 使得 P Q A C / 2 PQAC/2 PQAC/2. 設 △ A B Q \triangle ABQ △ABQ 的外接圓與邊 B C BC BC 相交于點 X X X, △ B C P \triangle …

UWB雙通道隧道人員定位方案

技術基礎&#xff1a;UWB&#xff08;超寬帶技術&#xff09; 定義&#xff1a;UWB&#xff08;Ultra-Wideband&#xff09;是一種通過納秒級窄脈沖傳輸數據的無線通信技術&#xff0c;占用500MHz以上的超寬頻段。 核心優勢&#xff1a; 高精度定位&#xff1a;時間分辨率極高&…

Linux 入門八:Linux 多進程

一、概述 1.1 什么是進程&#xff1f; 在 Linux 系統中&#xff0c;進程是程序的一次動態執行過程。程序是靜態的可執行文件&#xff0c;而進程是程序運行時的實例&#xff0c;系統會為其分配內存、CPU 時間片等資源。例如&#xff0c;輸入 ls 命令時&#xff0c;系統創建進程…

MTCNN 人臉識別

前言 此處介紹強大的 MTCNN 模塊&#xff0c;給出demo&#xff0c;展示MTCNN 的 OOP&#xff0c; 以及ROS利用 C 節點&#xff0c;命令行調用腳本執行實際工作的思路。 MTCNN Script import argparse import cv2 from mtcnn import MTCNN import osclass MTCNNProcessor:def…

01_核心系統下的技術原理解析

15年前&#xff0c;基本上國內的核心系統被C壟斷&#xff0c;基本上是IBM的那套東西&#xff0c;場景也是比價復雜&#xff0c;這里不再贅述&#xff0c;TPS太過于龐大&#xff0c;技術上確實比較復雜。為此我這里拋磚引玉&#xff0c;說下對應的支付系統&#xff1a; &#x…

Python 實現最小插件框架

文章目錄 Python 實現最小插件框架1. 基礎實現項目結構plugin_base.py - 插件基類plugins/hello.py - 示例插件1plugins/goodbye.py - 示例插件2main.py - 主程序 2. 更高級的特性擴展2.1 插件配置支持2.2 插件依賴管理2.3 插件熱加載 3. 使用 setuptools 的入口點發現插件3.1 …

電感詳解:定義、作用、分類與使用要點

一、電感的基本定義 電感&#xff08;Inductor&#xff09; 是由導線繞制而成的儲能元件&#xff0c;其核心特性是阻礙電流變化&#xff0c;將電能轉化為磁能存儲。 基本公式&#xff1a; 自感電動勢&#xff1a; E -L * (di/dt) &#xff08;L&#xff1a;電感值&#xff0c…

運行一次性任務與定時任務

運行一次性任務與定時任務 文章目錄 運行一次性任務與定時任務[toc]一、使用Job運行一次性任務1.創建一次性任務2.測試一次性任務3.刪除Job 二、使用CronJob運行定時任務1.創建定時任務2.測試定時任務3.刪除CronJob 一、使用Job運行一次性任務 1.創建一次性任務 &#xff08;…

對話記憶(Conversational Memory)

一、引言 在與大型語言模型&#xff08;LLM&#xff09;交互的場景中&#xff0c;對話記憶&#xff08;Conversational Memory&#xff09;指的是模型能夠在多輪對話中保留、檢索并利用先前上下文信息的能力。這一機制使得對話系統不再僅僅是“問答機”&#xff0c;而是能夠持…

【HD-RK3576-PI】VNC 遠程桌面連接

在當今數字化時代&#xff0c;高效便捷的操作方式是技術愛好者與專業人士的共同追求。對于使用 HD-RK3576-PI微型單板計算機的用戶而言&#xff0c;當面臨沒有顯示屏的場景時&#xff0c;如何實現遠程操作桌面系統呢&#xff1f;別擔心&#xff0c;VNC 遠程桌面連接將為你解決這…

【unity游戲開發介紹之UGUI篇】UGUI概述和基礎使用

注意&#xff1a;考慮到UGUI的內容比較多&#xff0c;我將UGUI的內容分開&#xff0c;并全部整合放在【unity游戲開發介紹之UGUI篇】專欄里&#xff0c;感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言1、UI系統的重要性2、UGUI概述2.1 基本定義2.2 UGUI發展歷史 3、學習U…

Ubuntu 系統深度清理:徹底卸載 Redis 服務及殘留配置

Ubuntu 系統深度清理&#xff1a;徹底卸載 Redis 服務及殘留配置 在Ubuntu系統中&#xff0c;Redis是一種廣泛使用的內存數據存儲系統&#xff0c;用于緩存和消息傳遞等場景。然而&#xff0c;有時候我們需要徹底卸載Redis&#xff0c;以清理系統資源或為其他應用騰出空間。本…

[ARC196A] Adjacent Delete 題解

假設 n n n 是偶數。如果我們忽略刪除相鄰數的條件&#xff0c;即可以任選兩個數相減&#xff0c;那么答案應該是前 n 2 \frac{n}{2} 2n? 大的數&#xff08;記作“較大數”&#xff09;的和減去前 n 2 \frac{n}{2} 2n? 小的數&#xff08;記作“較小數”&#xff09;的和…