【今日三題】判斷是不是平衡二叉樹(遞歸) / 最大子矩陣(二維前綴和) / 小蔥的01串(滑動窗口)

頭像
??個人主頁:@小羊
??所屬專欄:每日兩三題
很榮幸您能閱讀我的文章,誠請評論指點,歡迎歡迎 ~

動圖描述

目錄

    • 判斷是不是平衡二叉樹(遞歸)
    • 最大子矩陣(二維前綴和)
    • 小蔥的01串(滑動窗口)


判斷是不是平衡二叉樹(遞歸)

  • 判斷是不是平衡二叉樹

在這里插入圖片描述
在這里插入圖片描述

  • 判斷一個二叉樹是不是平衡二叉樹,我們需要知道其左子樹和右子樹是不是平衡二叉樹,并且左右子樹的高度差不超過1。
  • 但是返回值只有一個,因此我們規定如果當前子樹不是平衡二叉樹,返回-1;如果是平衡二叉樹則返回其高度。
  • 整個過程是后序遍歷。
class Solution {
public:bool IsBalanced_Solution(TreeNode* pRoot) {return dfs(pRoot) != -1;}int dfs(TreeNode* root){if (root == nullptr) return 0;int left = dfs(root->left);if (left == -1) return -1; // 剪枝int right = dfs(root->right);if (right == -1) return -1;return abs(right - left) <= 1 ? max(left, right) + 1 : -1;}
};

最大子矩陣(二維前綴和)

  • 最大子矩陣

在這里插入圖片描述

二維前綴和模板題。

#include <iostream>
using namespace std;int pre[101][101];
int n, res = -0x3f3f3f3f;int main()
{cin >> n;for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){int x;cin >> x;pre[i][j] = pre[i - 1][j] + pre[i][j - 1] - pre[i - 1][j - 1] + x;}}for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){for (int k = i; k <= n; k++){for (int l = j; l <= n; l++){res = max(res, pre[k][l] - pre[i - 1][l] - pre[k][j - 1] + pre[i - 1][j - 1]);}}}}cout << res << endl;return 0;
}

小蔥的01串(滑動窗口)

  • 小蔥的01串

在這里插入圖片描述

  • 也就是在字符串上維護一段長度為n/2的窗口,當窗口內的0和1的個數和外面0和1的個數相等時更新結果;
  • 字符串成環,當從字符串中找到一段區間滿足要求時,實際上找到了兩個結果;
  • 需要注意的是:當枚舉到字符串邊界時,其實另一邊已經算過了,因此我們只能枚舉一個邊界。

在這里插入圖片描述

#include <iostream>
#include <string>
using namespace std;int n, res;
string s;int main()
{cin >> n >> s;int x = 0, y = 0;for (auto ch : s){if (ch == '0') x++;else y++;}if (x % 2) res = 0;else{x /= 2, y /= 2;for (int l = 0, r = 0; r < n - 1; r++){if (s[r] == '0') x--;else y--;while (r - l + 1 > n / 2){if (s[l++] == '0') x++;else y++;}if (r - l + 1 == n / 2){if (x == 0 && y == 0){res++;}}}}cout << res * 2 << endl;return 0;
}

本篇文章的分享就到這里了,如果您覺得在本文有所收獲,還請留下您的三連支持哦~

頭像

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

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

相關文章

【Linux】線程ID、線程管理、與線程互斥

&#x1f4da; 博主的專欄 &#x1f427; Linux | &#x1f5a5;? C | &#x1f4ca; 數據結構 | &#x1f4a1;C 算法 | &#x1f310; C 語言 上篇文章&#xff1a; 【Linux】線程&#xff1a;從原理到實戰&#xff0c;全面掌握多線程編程&#xff01;-CSDN博客 下…

定制一款國密瀏覽器(10):移植SM2算法前,解決錯誤碼的定義問題

上一章中,我給大家介紹了 SM4 在 BoringSSL 上的移植要點,本來計劃本章介紹 SM2 算法的移植要點。在移植 SM2 過程中,遇到了一個攔路虎,所以先掃除這個攔路虎,這就是錯誤碼的定義問題。 在銅鎖中,引入了幾個錯誤碼和錯誤字符串,在文件 sm2_err.c 中: static const ER…

JDOM處理XML:Java程序員的“樂高積木2.0版“

各位代碼建筑師們&#xff01;今天我們要玩一款比原生DOM更"Java友好"的XML積木套裝——JDOM&#xff01;它像樂高得寶系列&#xff08;Duplo&#xff09;一樣簡單易用&#xff0c;卻能讓你的XML工程穩如霍格沃茨城堡&#xff01;&#xff08;溫馨提示&#xff1a;別…

【后端開發】Spring日志

文章目錄 Spring日志日志作用日志測試日志信息日志級別日志配置配置日志級別日志持久化日志文件分割 注解的使用 Spring日志 日志作用 系統監控&#xff1a;可以通過日志記錄這個系統的運行狀態&#xff0c;對數據進行分析&#xff0c;設置不同的規則&#xff0c;超過閾值時進…

探索大語言模型(LLM):Transformer 與 BERT從原理到實踐

Transformer 與 BERT&#xff1a;從原理到實踐 前言一、背景介紹二、核心公式推導1. 注意力機制&#xff08;Attention Mechanism&#xff09;2. 多頭注意力機制&#xff08;Multi-Head Attention&#xff09;3. Transformer 編碼器&#xff08;Transformer Encoder&#xff09…

計算機網絡八股——HTTP協議與HTTPS協議

目錄 HTTP1.1簡述與特性 1. 報文清晰易讀 2. 靈活和易于擴展 3. ?狀態 Cookie和Session 4. 明?傳輸、不安全 HTTP協議發展過程 HTTP/1.1的不足 HTTP/2.0 HTTP/3.0 HTTPS協議 HTTP協議和HTTPS協議的區別 HTTPS中的加密方式 HTTPS中建立連接的方式 前言&#xff…

QML中的3D功能--入門開發

Qt Quick 提供了強大的 3D 功能支持,主要通過 Qt 3D 模塊實現。以下是 QML 中開發 3D 應用的全面指南。 1. 基本配置 環境要求 Qt 5.10 或更高版本(推薦 Qt 6.x) 啟用 Qt 3D 模塊 支持 OpenGL 的硬件 項目配置 在 .pro 文件中添加: QT += 3dcore 3drender 3dinput 3dex…

Git合并分支的兩種常用方式`git merge`和`git cherry-pick`

Git合并分支的兩種常用方式git merge和git cherry-pick 寫在前面1. git merge用途工作方式使用git命令方式合并使用idea工具方式合并 2. git cherry-pick用途工作方式使用git命令方式合并使用idea工具方式合并 3. 區別總結 寫在前面 一般我們使用git合并分支常用的就是git mer…

Web三漏洞學習(其三:rce漏洞)

靶場&#xff1a;NSSCTF 三、RCE漏洞 1、概述 在Web應用開發中會讓應用調用代碼執行函數或系統命令執行函數處理&#xff0c;若應用對用戶的輸入過濾不嚴&#xff0c;容易產生遠程代碼執行漏洞或系統命令執行漏洞 所以常見的RCE漏洞函數又分為代碼執行函數和系統命令執行函數…

從零開始:Python運行環境之VSCode與Anaconda安裝配置全攻略 (1)

從零開始&#xff1a;Python 運行環境之 VSCode 與 Anaconda 安裝配置全攻略 在當今數字化時代&#xff0c;Python 作為一種功能強大且易于學習的編程語言&#xff0c;被廣泛應用于數據科學、人工智能、Web 開發等眾多領域。為了順利開啟 Python 編程之旅&#xff0c;搭建一個穩…

從FPGA實現角度介紹DP_Main_link主通道原理

DisplayPort&#xff08;簡稱DP&#xff09;是一個標準化的數字式視頻接口標準&#xff0c;具有三大基本架構包含影音傳輸的主要通道&#xff08;Main Link&#xff09;、輔助通道&#xff08;AUX&#xff09;、與熱插拔&#xff08;HPD&#xff09;。 Main Link&#xff1a;用…

嵌入式軟件--stm32 DAY 2

大家學習嵌入式的時候&#xff0c;多多學習用KEIL寫代碼&#xff0c;雖然作為編譯器&#xff0c;大家常用vscode等常用工具關聯編碼&#xff0c;但目前keil仍然是主流工具之一&#xff0c;學習掌握十分必要。 1.再次創建項目 1.1編譯器自動生成文件 1.2初始文件 這樣下次創建新…

游戲引擎學習第234天:實現基數排序

回顧并為今天的內容設定背景 我們今天繼續進行排序的相關&#xff0c;雖然基本已經完成了&#xff0c;但還是想收尾一下&#xff0c;讓整個流程更完整。其實這次排序只是個借口&#xff0c;主要是想順便聊一聊一些計算機科學的知識點&#xff0c;這些內容在我們項目中平時不會…

計算機網絡——常見的網絡攻擊手段

什么是XSS攻擊&#xff0c;如何避免? XSS 攻擊&#xff0c;全稱跨站腳本攻擊&#xff08;Cross-Site Scripting&#xff09;&#xff0c;這會與層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆&#xff0c;因此有人將跨站腳本攻擊縮寫為XSS。它指的是惡意攻擊者往Web頁面…

Agent的九種設計模式 介紹

Agent的九種設計模式 介紹 一、ReAct模式 原理:將推理(Reasoning)和行動(Acting)相結合,使Agent能夠在推理的指導下采取行動,并根據行動的結果進一步推理,形成一個循環。Agent通過生成一系列的思維鏈(Thought Chains)來明確推理步驟,并根據推理結果執行相應的動作,…

LeetCode 熱題 100:回溯

46. 全排列 給定一個不含重復數字的數組 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意順序 返回答案。 示例 1&#xff1a; 輸入&#xff1a;nums [1,2,3] 輸出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 輸入&#xff…

cJSON_Print 和 cJSON_PrintUnformatted的區別

cJSON_Print 和 cJSON_PrintUnformatted 是 cJSON 庫中用于將 cJSON 對象轉換為 JSON 字符串的兩個函數&#xff0c;它們的區別主要在于輸出的格式&#xff1a; 1. cJSON_Print 功能&#xff1a;將 cJSON 對象轉換為格式化的 JSON 字符串。 特點&#xff1a; 輸出的 JSON 字符…

A股周度復盤與下周策略 的deepseek提示詞模板

以下是反向整理的股票大盤分析提示詞模板&#xff0c;采用結構化框架數據占位符設計&#xff0c;可直接套用每周市場數據&#xff1a; 請根據一下markdown格式的模板&#xff0c;幫我檢索整理并輸出本周股市復盤和下周投資策略 【A股周度復盤與下周策略提示詞模板】 一、市場…

Linux下使用C++獲取硬件信息

目錄 方法獲取CPU信息&#xff1a;讀取"/proc/cpuinfo"文件獲取磁盤信息&#xff1a;讀取"/proc/diskstats"文件獲取BIOS信息有兩種方法&#xff1a;1、讀取文件&#xff1b;2、使用dmidecode命令獲取主板信息有兩種方法&#xff1a;1、讀取文件&#xff1…

BootStrap:進階使用(其二)

今天我要講述的是在BootStrap中第二篇關于進一步使用的方法與代碼舉例; 分頁&#xff1a; 對于一些大型網站而言&#xff0c;分頁是一個很有必要的存在&#xff0c;如果當數據內容過大時&#xff0c;則需要分頁來分擔一些&#xff0c;這可以使得大量內容能整合并全面地展示&a…