算法打卡第三天

10.長度最小的子數組

(力扣209題)

給定一個含有 n 個正整數的數組和一個正整數 target

找出該數組中滿足其總和大于等于 target 的長度最小的 子數組 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其長度**。**如果不存在符合條件的子數組,返回 0

示例 1:

輸入:target = 7, nums = [2,3,1,2,4,3]
輸出:2
解釋:子數組 [4,3] 是該條件下的長度最小的子數組。

示例 2:

輸入:target = 4, nums = [1,4,4]
輸出:1

示例 3:

輸入:target = 11, nums = [1,1,1,1,1,1,1,1]
輸出:0

使用 滑動窗口

10.1 滑動窗口

滑動窗口,就是不斷的調節子序列的起始位置和終止位置,從而得出我們要想的結果

滑動窗口也可以理解為雙指針法的一種,

使用一個for循環,j是滑動窗口的終止位置,i是起始位置,也是動態指針,

窗口的起始位置i:當前窗口值大于等于傳入的值,i移動;

窗口的結束位置j:j就是遍歷數組的指針,是for循環里的索引

代碼

#include <iostream>
#include <vector>
using namespace std;
// 暴力破解
class Solution1
{
public:int minSubArrayLen(int target, vector<int> &nums){int result = INT32_MAX; // 最終的結果 INT32_MAX 是一個常量,表示 32 位有符號整數的最大值。int sum = 0;            // 子序列的數值之和int length = 0;         // 子序列的長度for (int i = 0; i < nums.size(); i++) // 字序列起點{sum = 0;for (int j = i; j < nums.size(); j++) // 字序列終點{// 遍歷的數組元素存入子序列sum += nums[j];if (sum >= target){// 總和大于等于目標值length = j - i + 1; // 子序列的長度// 找符合條件最小的長度result = length < result ? length : result;break;}}}// result結果沒有變化,沒有找到return result == INT32_MAX ? 0 : result;}
};class Solution
{
public:int minSubArrayLen(int target, vector<int> &nums){int result = INT32_MAX;               // 最終的結果 INT32_MAX 是一個常量,表示 32 位有符號整數的最大值。int sum = 0;                          // 子序列的數值之和int length = 0;                       // 子序列的長度int i = 0;                            // 窗口的起始位置for (int j = 0; j < nums.size(); j++) // 遍歷數組{// 遍歷的數組元素存入子序列sum += nums[j];while (sum >= target){// 子序列大于目標值開始位置變化 尋找最小的序列length = j - i + 1;result = result < length ? result : length;sum -= nums[i++];}}// 沒找到 返回0return result == INT32_MAX ? 0 : result;}
};
int main()
{vector<int> arr1 = {2, 3, 1, 2, 4, 3};vector<int> arr2 = {1, 4, 4};vector<int> arr3 = {1, 1, 1, 1, 1, 1, 1, 1};Solution s;cout << s.minSubArrayLen(7, arr1) << endl;cout << s.minSubArrayLen(4, arr2) << endl;cout << s.minSubArrayLen(11, arr3) << endl;return 0;
}

11.水果成籃

(力扣904題)

你正在探訪一家農場,農場從左到右種植了一排果樹。這些樹用一個整數數組 fruits 表示,其中 fruits[i] 是第 i 棵樹上的水果 種類

你想要盡可能多地收集水果。然而,農場的主人設定了一些嚴格的規矩,你必須按照要求采摘水果:

  • 你只有 兩個 籃子,并且每個籃子只能裝 單一類型 的水果。每個籃子能夠裝的水果總量沒有限制。
  • 你可以選擇任意一棵樹開始采摘,你必須從 每棵 樹(包括開始采摘的樹)上 恰好摘一個水果 。采摘的水果應當符合籃子中的水果類型。每采摘一次,你將會向右移動到下一棵樹,并繼續采摘。
  • 一旦你走到某棵樹前,但水果不符合籃子的水果類型,那么就必須停止采摘。

給你一個整數數組 fruits ,返回你可以收集的水果的 最大 數目。

示例 1:

輸入:fruits = [1,2,1]
輸出:3
解釋:可以采摘全部 3 棵樹。

示例 2:

輸入:fruits = [0,1,2,2]
輸出:3
解釋:可以采摘 [1,2,2] 這三棵樹。
如果從第一棵樹開始采摘,則只能采摘 [0,1] 這兩棵樹。

示例 3:

輸入:fruits = [1,2,3,2,2]
輸出:4
解釋:可以采摘 [2,3,2,2] 這四棵樹。
如果從第一棵樹開始采摘,則只能采摘 [1,2] 這兩棵樹。

示例 4:

輸入:fruits = [3,3,3,1,2,1,1,2,3,3,4]
輸出:5
解釋:可以采摘 [1,2,1,1,2] 這五棵樹。

和上面的題的區別是這個是找最長子序列

  • 思路
  1. 初始化滑動窗口的左右邊界 ij,以及一個哈希表 basket 來記錄窗口內水果的種類和數量。
  2. 遍歷數組,將水果加入窗口(basket),并更新其數量。
  3. 當窗口內的水果種類超過兩種時,收縮窗口的左邊界(i),減少對應水果的數量,直到窗口內水果種類不超過兩種。
  4. 在每次循環中,更新最長子數組的長度(result),即當前窗口的大小(j - i + 1)。
  5. 最終返回 result,即最長的滿足條件的子數組長度

實例

#include <iostream>
#include <vector>
#include <unordered_map>using namespace std;
// 這個是找最長的序列
class Solution
{
public:int totalFruit(vector<int> &fruits){// 收集最終水果的數目int result = 0;// /籃子中的水果種類數量unordered_map<int, int>  basket;// 滑動窗口的開始位置int i = 0;for (int j = 0; j < fruits.size(); j++){basket[fruits[j]]++;// 籃子水果種類大于2while(basket.size() > 2){basket[fruits[i]]--;// 如果某種水果數量為0,從籃子中移除if( basket[fruits[i]] == 0){basket.erase(fruits[i]);}i++;}result = max(result, j - i + 1);}return result;}};

給你一個正整數 n ,生成一個包含 1n2 所有元素,且元素按順時針順序螺旋排列的 n x n 正方形矩陣 matrix

12 螺旋矩陣

(力扣59題)

示例 1:

img

輸入:n = 3
輸出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

輸入:n = 1
輸出:[[1]]

核心思路是通過逐層填充矩陣的外圈,逐步向內收縮,直到填充完整個矩陣

  1. 初始化一個 n×n 的二維數組 res,所有元素初始值為 0。
  2. 使用變量 startxstarty 表示當前層的起始位置,loop 表示需要填充的圈數,offset 表示當前層的邊界偏移量。
  3. 使用一個循環逐層填充矩陣,每次循環填充當前層的上、右、下、左四條邊。
  4. 在填充每條邊時,通過 for 循環依次賦值,并更新 count
  5. 每完成一層后,更新 startxstartyoffset,進入內層繼續填充。
  6. 如果矩陣的維度 n 是奇數,最后單獨填充矩陣中心的值。

實例

// 給你一個正整數 n ,生成一個包含 1 到 n2 所有元素,
// 且元素按順時針順序螺旋排列的 n x n 正方形矩陣 matrix 。
#include <iostream>
#include <vector>
using namespace std;class Solution
{
public:vector<vector<int>> generateMatrix(int n){// 大小為 n×n 的二維向量,其所有元素的初始值都為 0。vector<vector<int>> res(n, vector<int>(n, 0));int startx = 0, starty = 0; // 數組的行列起始位置int loop = n / 2;           // 循環次數int mid = n / 2;            // 中間的值 n = 5 中間的位置就是2,2int count = 1;              // 給數組賦值int offset = 1;             // 縮進 控制的終止位置int i, j = 0;while (loop--){i = startx;j = starty;// 下面開始的四個for就是模擬轉了一圈// 模擬填充上行從左到右(左閉右開)for (j; j < n - offset; j++){// 儲存元素res[i][j] = count++;}for (i; i < n - offset; i++){// 儲存元素res[i][j] = count++;}for (; j > starty; j--){// 儲存元素res[i][j] = count++;}for (; i > startx; i--){// 儲存元素res[i][j] = count++;}// 下一圈起始位置+1 進入內圈startx++;starty++;// 進入內圈偏移量+1以便同步offset++;}// / 如果n為奇數的話,需要單獨給矩陣最中間的位置賦值 就是countif (n % 2) {res[mid][mid] = count;}return res;}
};
int main()
{int n = 0;cout << "請輸入一個正整數:";cin >> n;Solution s1;vector<vector<int>> res = s1.generateMatrix(n);for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){cout << res[i][j] << " ";}cout << endl;}return 0;
}

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

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

相關文章

數字電子技術基礎(六十二)——使用Multisim軟件繪制邊沿觸發的D觸發器和JK觸發器

1 使用Mulitism軟件模擬時鐘觸發的D觸發器 D觸發器是一種基本的數字電路存儲元件&#xff0c;它在時鐘信號的邊沿將輸入數據D傳遞到輸出Q。下面開始使用Multisim軟件來模擬時鐘觸發的D觸發器。 器件選擇&#xff1a; 觸發器選擇&#xff1a;在組選項欄中點擊Misc Digital&am…

自動獲取新版本 js 靜態文件

場景 代碼里有靜態js文件&#xff0c;發布一個版本1.0在真實環境&#xff0c;再修改重新發布2.0&#xff0c;用戶如何得到新版本&#xff1f; 方法 一、文件名哈希策略&#xff08;最推薦&#xff09; 通過構建工具為文件生成唯一哈希值&#xff0c;使每次更新后的文件名不同…

第13天-用BeautifulSoup解析網頁數據:以百度熱搜可視化為例

一、BeautifulSoup簡介 BeautifulSoup是Python最受歡迎的HTML/XML解析庫之一,它能將復雜的網頁文檔轉換為樹形結構,支持多種解析器(如lxml、html.parser)。配合requests庫,可以快速構建網頁爬蟲項目。 二、環境準備 pip install requests beautifulsoup4 matplotlib 三…

PyTorch中cdist和sum函數使用詳解

torch.cdist 是 PyTorch 中用于計算**兩個張量之間的成對距離&#xff08;pairwise distance&#xff09;**的函數&#xff0c;常用于點云處理、圖神經網絡、相似性度量等場景。 基本語法 torch.cdist(x1, x2, p2.0)參數說明&#xff1a; 參數說明x1一個形狀為 [B, M, D] 或 …

智能視覺檢測技術:制造業質量管控的“隱形守護者”

在工業4.0浪潮的推動下&#xff0c;制造業正經歷一場以智能化為核心的變革。傳統人工質檢模式因效率低、誤差率高、成本高昂等問題&#xff0c;逐漸難以滿足現代生產對高精度、高速度的需求。智能視覺檢測技術作為人工智能與機器視覺融合的產物&#xff0c;正成為制造業質量管控…

水滸后傳-暹羅國建立新國家的故事

第一節《怒海余生》 李俊率領殘部穿越臺風海域&#xff0c;在暹羅灣遭遇葡萄牙艦隊突襲。童猛為掩護船隊突圍&#xff0c;駕駛火船與敵艦同歸于盡&#xff0c;留下最后的忠義絕唱。 第二節《血染王城》 李俊與暹羅舊貴族勢力在曼谷河畔展開決戰。中原陣法與暹羅象兵碰撞出驚心…

1.portainer

容器可視化工具 商業版Business、社區版Community docker容器部署portainer&#xff0c;對外暴露端口9443是一個自簽名的證書端口。還有另外一個暴露的端口8000。 volume 要想看得到&#xff0c;需要通過 portainer可視化界面看到volume&#xff0c;就必須使用&#xff1a; d…

使用Starrocks制作拉鏈表

5月1日向ods_order_info插入3條數據&#xff1a; CREATE TABLE ods_order_info(dt string,id string COMMENT 訂單編號,total_amount decimal(10,2) COMMENT 訂單金額 ) PRIMARY KEY(dt, id) PARTITION BY (dt) DISTRIBUTED BY HASH(id) PROPERTIES ( "replication_num&q…

Linux下Docker使用阿里云鏡像加速器

在中國大陸環境中配置 Docker 使用阿里云鏡像加速器&#xff0c;并確保通過 Clash 代理訪問 Docker Hub 我這里用的Debian12。 步驟 1&#xff1a;獲取阿里云鏡像加速器地址 登錄阿里云容器鏡像服務控制臺&#xff1a;(qinyang.wang) 網址&#xff1a;阿里云登錄 - 歡迎登錄阿…

Electron 后臺常駐服務實現(托盤 + 開機自啟)

基于 electron-vite-vue 項目結構 本篇將詳細介紹如何為 Electron 應用實現后臺常駐運行&#xff0c;包括&#xff1a; ? 創建系統托盤圖標&#xff08;Tray&#xff09;? 支持點擊托盤菜單控制窗口顯示/退出? 實現開機自啟功能&#xff08;Auto Launch&#xff09; &#…

opencv的直方圖

理解并運用 OpenCV 中的圖像直方圖 &#x1f4ca;&#x1f5bc;? 圖像直方圖是計算機視覺和圖像處理中一種基本且強大的工具&#xff0c;它提供了圖像像素強度分布的圖形化表示。OpenCV 作為一個全面的計算機視覺庫&#xff0c;內置了計算和可視化直方圖的強大功能。本文將深…

Linux 內核探秘:從零構建 GPIO 設備驅動程序實戰指南

在嵌入式系統開發領域&#xff0c;GPIO&#xff08;通用輸入 / 輸出&#xff09;作為硬件與軟件交互的橋梁&#xff0c;是實現設備控制與數據采集的基礎。編寫高效、穩定的 GPIO 設備驅動程序&#xff0c;對于發揮硬件性能至關重要。本文將深入剖析 Linux 內核中 GPIO 驅動開發…

嵌入式單片機中STM32F1演示寄存器控制方法

該文以STM32F103C8T6為示例,演示如何使用操作寄存器的方法點亮(關閉LED燈),并講解了如何調試,以及使用宏定義。 第一:操作寄存器點亮LED燈。 (1)首先我們的目的是操作板子上的LED2燈,對其實現點亮和關閉操作。打開STM32F103C8T6的原理圖,找到LED2的位置。 可以看到…

牛客網 NC16407 題解:托米航空公司的座位安排問題

牛客網 NC16407 題解&#xff1a;托米航空公司的座位安排問題 題目分析 解題思路 本題可以采用深度優先搜索(DFS)來解決&#xff1a; 從左上角開始&#xff0c;按行優先順序遍歷每個座位對于每個座位&#xff0c;有兩種選擇&#xff1a; 選擇該座位&#xff08;如果滿足條件…

智慧展館數字孿生平臺

2022年進博會上&#xff0c;國家會展中心憑借“數字孿生機器人調度平臺”驚艷全球&#xff0c;實現人機協同、虛實聯動的智慧運營&#xff1b;2023年天府農博園通過“BIMIoT”技術&#xff0c;貫穿展館全生命周期管理&#xff0c;成為農業會展的數字化標桿。這些案例背后&#…

胡說八道1---豆包問答總結

用戶提問 1 指令&#xff1a;25 - - [21/May/2025:01:35:45 0000] “POST /prod-api/system/base/getList HTTP/1.1” 405 559 “http://192.168.1.109:16380/login” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 …

C# AOP編程

AOP(面向切片編程的概念我這里就不介紹了&#xff0c;這里先介紹一下C#中的AOP編程框架。 1.AOP的分類 .net下支持AOP的框架很多&#xff0c;搜了一下有&#xff1a;PostSharp、AspectInjector、Fody 、Castle Windsor、Spring.NET、Ninject、Unity等&#xff0c;實現的方式主要…

linux編譯安裝srs

下載編譯運行 git clone https://github.com/ossrs/srs.git cd srs/trunk ./configure --h265on make需要安裝 yum install -y patch yum install -y unzip yum install -y tcl編譯完成后即可啟動SRS # 啟動 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/s…

EtherNet/IP機柜內解決方案在醫療控制中心智能化的應用潛能和方向分析

引言 在數智化轉型浪潮席卷各行各業的今天,醫療領域同樣面臨著提升運營效率、改善患者體驗和加強系統可靠性的多重挑戰。Rockwell Automation于2025年5月20日推出的EtherNet/IP機柜內解決方案,為醫療中心的自動化升級提供了一種創新路徑。本報告將深入分析這一解決方案的核心…

大模型下載到本地

一、huggingface 方式一 from huggingface_hub import snapshot_downloadlocal_dir "./origin" model_name "Qwen/Qwen2.5-1.5B"# snapshot_download(repo_idmodel_name, cache_dirlocal_dir) model_dir snapshot_download(model_name,cache_dirlocal…