【Leecode 隨筆】

在這里插入圖片描述

文章目錄

    • 題目一:盛最多水的容器
      • 題目描述:
      • 題目分析:
      • 解題思路:
      • 示例代碼:
      • 深入剖析:
    • 題目二:最長無重復字符的子串
      • 題目描述:
      • 題目分析:
      • 解題思路:
      • 示例代碼:
      • 深入剖析:
    • 題目三:合并區間
      • 題目描述:
      • 題目分析:
      • 解題思路:
      • 示例代碼:
      • 深入剖析:

🌈你好呀!我是 山頂風景獨好
🎈歡迎踏入我的博客世界,能與您在此邂逅,真是緣分使然!😊
🌸愿您在此停留的每一刻,都沐浴在輕松愉悅的氛圍中。
📖這里不僅有豐富的知識和趣味橫生的內容等您來探索,更是一個自由交流的平臺,期待您留下獨特的思考與見解。🌟
🚀讓我們一起踏上這段探索與成長的旅程,攜手挖掘更多可能,共同進步!💪?

題目一:盛最多水的容器

題目描述:

給定 n 個非負整數 a1,a2,…,an,每個數代表一個坐標點 (i, ai) 。在坐標內畫 n 條垂直線,使得 i 垂直線的兩個端點分別為 (i, ai) 和 (i, 0)。找出其中的兩條線,使得它們與 x 軸構成的容器可以容納最多的水。

題目分析:

這是一個典型的雙指針問題。我們可以使用兩個指針分別指向數組的首尾,然后計算當前兩個指針所構成的容器的面積。接著,我們移動指向較短線段的指針(因為容器的高度由較短的線段決定,移動較長線段的指針無法增加容器的高度,而只會減少容器的寬度),直到兩個指針相遇。

解題思路:

初始化兩個指針,一個指向數組的開始,另一個指向數組的末尾。
計算當前兩個指針所構成的容器的面積,并更新最大面積。
移動指向較短線段的指針。
重復步驟2和3,直到兩個指針相遇。
返回最大面積。

示例代碼:

#include <stdio.h>  // 函數聲明  
int maxArea(int* height, int heightSize);  int main() {  int height[] = {1,8,6,2,5,4,8,3,7};  int heightSize = sizeof(height) / sizeof(height[0]);  int result = maxArea(height, heightSize);  printf("Maximum area: %d\n", result);  return 0;  
}  // 計算最大容器面積的函數實現  
int maxArea(int* height, int heightSize) {  int max_area = 0;  int left = 0;  int right = heightSize - 1;  while (left < right) {  // 計算當前容器的面積  int current_area = (right - left) * ((height[left] < height[right]) ? height[left] : height[right]);  // 更新最大面積  if (current_area > max_area) {  max_area = current_area;  }  // 移動指向較短線段的指針  if (height[left] < height[right]) {  left++;  } else {  right--;  }  }  return max_area;  
}

深入剖析:

該算法的時間復雜度為O(n),因為我們只遍歷了數組一次。空間復雜度為O(1),因為我們只使用了常數級別的額外空間。這種雙指針的技巧在處理類似問題時非常有用,特別是當問題涉及到數組或鏈表的兩端時。

題目二:最長無重復字符的子串

題目描述:

給定一個字符串,找出其中沒有重復字符的最長子串的長度。

題目分析:

這是一個滑動窗口問題。我們可以使用兩個指針來定義一個窗口,窗口內的字符都是唯一的。當遇到重復字符時,我們移動左指針來縮小窗口,直到窗口內沒有重復字符為止。同時,我們需要一個哈希表來記錄每個字符在窗口中的位置,以便在O(1)時間內判斷字符是否重復。

解題思路:

初始化兩個指針(left和right)和一個哈希表(用于記錄字符的位置)。
使用right指針擴展窗口,直到遇到重復字符。
當遇到重復字符時,移動left指針縮小窗口,直到窗口內沒有重復字符。
在每次移動窗口后,更新最大長度。
重復步驟2-4,直到right指針到達字符串的末尾。
返回最大長度。

示例代碼:

#include <stdio.h>  
#include <string.h>  // 函數聲明  
int lengthOfLongestSubstring(char * s);  int main() {  char s[] = "abcabcbb";  int result = lengthOfLongestSubstring(s);  printf("Length of longest substring without repeating characters: %d\n", result);  return 0;  
}  // 計算最長無重復字符子串長度的函數實現  
int lengthOfLongestSubstring(char * s) {  int n = strlen(s);  if (n == 0) {  return 0;  }  int max_len = 0;  int left = 0;  int right = 0;  int char_map[256] = { -1 }; // 假設輸入字符為ASCII碼  while (right < n) {  if (char_map[s[right]] != -1) {  // 遇到重復字符,移動左指針  left = (char_map[s[right]] + 1 > left) ? char_map[s[right]] + 1 : left;  }  // 更新字符的位置  char_map[s[right]] = right;  // 更新最大長度  max_len = (right - left + 1 > max_len) ? right - left + 1 : max_len;  // 移動右指針  right++;  }  return max_len;  
}

深入剖析:

該算法的時間復雜度為O(n),因為我們只遍歷了字符串一次。空間復雜度為O(1)(如果考慮哈希表的大小為常數,因為ASCII碼字符集是有限的),但實際上哈希表的大小取決于字符集的大小,對于Unicode字符集,空間復雜度會稍大一些。滑動窗口技巧在處理子串、子數組相關問題時非常有效。

題目三:合并區間

題目描述:

給出一個區間的集合,請合并所有重疊的部分。

題目分析:

這是一個排序和合并問題。首先,我們需要對區間按照起始位置進行排序。然后,我們遍歷排序后的區間列表,使用一個變量來跟蹤當前的合并區間。如果下一個區間的起始位置小于或等于當前合并區間的結束位置,則將它們合并;否則,將當前合并區間添加到結果列表中,并更新合并區間為下一個區間。

解題思路:

對區間按照起始位置進行排序。
初始化一個空的結果列表和一個變量來跟蹤當前的合并區間。
遍歷排序后的區間列表:
如果當前區間與合并區間重疊,則合并它們。
否則,將合并區間添加到結果列表中,并更新合并區間為當前區間。
將最后一個合并區間添加到結果列表中。
返回結果列表。

示例代碼:

#include <stdio.h>  
#include <stdlib.h>  // 區間結構體定義  
typedef struct {  int start;  int end;  
} Interval;  // 比較函數,用于qsort排序  
int compare(const void *a, const void *b) {  Interval *intervalA = (Interval *)a;  Interval *intervalB = (Interval *)b;  return intervalA->start - intervalB->start;  
}  // 合并區間的函數聲明  
Interval* merge(Interval* intervals, int intervalsSize, int* returnSize);  int main() {  Interval intervals[] = {{1, 3}, {2, 6}, {8, 10}, {15, 18}};  int intervalsSize = sizeof(intervals) / sizeof(intervals[0]);  int returnSize = 0;  Interval* result = merge(intervals, intervalsSize, &returnSize);  printf("Merged intervals:\n");  for (int i = 0; i < returnSize; i++) {  printf("[%d, %d] ", result[i].start, result[i].end);  }  printf("\n");  // 釋放動態分配的內存  free(result);  return 0;  
}  // 合并區間的函數實現  
Interval* merge(Interval* intervals, int intervalsSize, int* returnSize) {  if (intervalsSize == 0) {  *returnSize = 0;  return NULL;  }  // 按照起始位置排序區間  qsort(intervals, intervalsSize, sizeof(Interval), compare);  // 動態分配結果數組的內存  Interval* merged = (Interval*)malloc(intervalsSize * sizeof(Interval));  *returnSize = 0;  // 初始化當前合并區間  Interval current = intervals[0];  for (int i = 1; i < intervalsSize; i++) {  if (intervals[i].start <= current.end) {  // 當前區間與合并區間重疊,合并它們  current.end = (intervals[i].end > current.end) ? intervals[i].end : current.end;  } else {  // 當前區間與合并區間不重疊,將合并區間添加到結果列表中,并更新合并區間  merged[*returnSize] = current;  (*returnSize)++;  current = intervals[i];  }  }  // 添加最后一個合并區間到結果列表中  merged[*returnSize] = current;  (*returnSize)++;  return merged;  
}

深入剖析:

該算法的時間復雜度為O(n log n),其中n是區間的數量,因為我們需要對區間進行排序。空間復雜度為O(n),因為我們需要動態分配一個與區間數量相等大小的結果數組。合并區間的技巧在處理類似問題時非常有用,特別是當問題涉及到重疊區間的合并、求并集等操作時。


? 這就是今天要分享給大家的全部內容了,我們下期再見!😊
🏠 我在CSDN等你哦!我的主頁😍

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

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

相關文章

Springboot項目應用PageInfo分頁問題失效

使用github的pagehelper分頁依賴<!-- 分頁控件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.0</version><scope>compile</scope></dependency&…

【無標題】標準模型粒子行為與11維拓撲量子色動力學模型嚴格對應的全面論述

標準模型粒子行為與11維拓撲量子色動力學模型嚴格對應的全面論述標準模型粒子與拓撲結構的嚴格對應 mermaid graph LRsubgraph 標準模型粒子A[費米子] --> A1[夸克]A --> A2[輕子]B[玻色子] --> B1[規范玻色子]B --> B2[希格斯]endsubgraph 11維拓撲模型C[實體頂點…

SQL一些關于存儲過程和使用的總結

存儲過程&#xff1a;數據庫里的 "定制工具箱"存儲過程就像一個裝滿工具的箱子&#xff0c;你需要什么功能&#xff0c;就調用對應的工具。它是用 SQL 語句寫好的一段程序&#xff0c;存儲在數據庫里&#xff0c;隨時可以調用。創建存儲過程 就像在工具箱里放新工具。…

springCloud -- 微服務01

目錄 一、認識微服務 1.單體架構 2.微服務 3.SpringCloud 二、微服務拆分 1.服務拆分原則 2.服務調用 3. RestTemplate 三、服務注冊和發現 1. 注冊中心原理 2. 服務發現 2.1 服務注冊 2.2 服務發現 四、OpenFeign 一、認識微服務 1.單體架構 單體架構就是整個項目中所有功能…

Deep Multi-scale Convolutional Neural Network for Dynamic Scene Deblurring 論文閱讀

用于動態場景去模糊的深度多尺度卷積神經網絡 摘要 針對一般動態場景的非均勻盲去模糊是一個具有挑戰性的計算機視覺問題&#xff0c;因為模糊不僅來源于多個物體運動&#xff0c;還來源于相機抖動和場景深度變化。為了去除這些復雜的運動模糊&#xff0c;傳統的基于能量優化的…

PDF 拆分合并PDFSam:開源免費 多文件合并 + 按頁碼拆分 本地處理

各位打工人和學生黨們&#xff0c;你知道嗎&#xff0c;處理PDF文件簡直是咱們的日常噩夢啊&#xff0c;尤其是遇到要合并好幾個文件&#xff0c;或者從中摳幾頁出來的時候&#xff0c;簡直頭大如斗&#xff01;今天給你們安利一個神仙工具&#xff0c;PDFSam&#xff0c;聽我的…

AI產品經理面試寶典第32天:AI+工業場景落地核心問題與應答策略

一、AI+工業落地價值怎么答? 面試官:AI在工業領域能創造哪些核心價值?請用具體案例說明 你的回答: AI在工業領域創造價值的底層邏輯是"數據閉環"。以阿里云ET工業大腦為例,通過采集生產線3000+傳感器數據,構建出影響良品率的60個關鍵變量模型。當數據流經AI…

【09】MFC入門到精通——MFC 屬性頁對話框的 CPropertyPage類 和 CPropertySheet 類

文章目錄九、屬性頁對話框的類CPropertyPage類 和 CPropertySheet 類。9.1 CPropertyPage 類&#xff08;1&#xff09;構造函數&#xff08;2&#xff09;CancelToClose()函數&#xff08;3&#xff09;SetModified()函數&#xff08;4&#xff09;可重載函數9.2 CPropertyShe…

Python學習筆記4

時間:2025.7.18學習內容&#xff1a;【語法基礎】if判斷、比較運算符與邏輯運算符一、if判斷if判斷基本格式&#xff1a;if要判斷的條件&#xff0c;條件成立時要做的事情注意&#xff1a;input內默認存儲的是字符串age17 if age<18:print(未成年不能上網) scoreinput(你的成…

20250718-2-Kubernetes 應用程序生命周期管理-Pod對象:基本概念(豌豆莢)_筆記

二、Kubernetes應用程序生命周期管理&#xfeff;1. 課程內容概述主要內容&#xff1a;Pod資源共享實現機制管理命令應用自修復&#xff08;重啟策略健康檢查&#xff09;環境變量Init container靜態Pod2. Pod對象介紹&#xfeff;1&#xff09;Pod基本概念&#xfeff;&#x…

為Notepad++插上JSON格式化的翅膀

文章目錄概要安裝步驟效果展示概要 JSMinNPP.dll 是一個 Notepad 插件&#xff0c;用于壓縮 JavaScript 代碼和格式化JSON字符床。以下是安裝和使用的詳細步驟&#xff1a; 安裝步驟 下載 JSMinNPP.dll 插件 https://pan.quark.cn/s/73dd0ac225be 放置 DLL 文件 打開 Notepa…

STM32-第七節-TIM定時器-3(輸入捕獲)

一、簡介&#xff1a;1.名稱&#xff1a;IC&#xff0c;輸入捕獲2.電路&#xff1a;如圖為通用定時器框圖&#xff0c;下半部分的左半模塊&#xff0c;與輸出比較部分共用捕獲/比較寄存器與引腳。3.功能&#xff1a;當通道輸入引腳出現電平跳變時&#xff0c;當前CNT的值&#…

Console 納管 Elasticsearch 9(二):日志監控

前面介紹過 INFINI Console 納管 Elasticsearch 9&#xff08;一&#xff09;&#xff0c;進行指標監控、數據管理、DSL 語句執行&#xff0c;但日志監控功能需要結合 Agent 才能使用。現在來實現一下&#xff1a; Agent 需要和 ES 部署到同一機器上&#xff0c;這里是在我本地…

實訓十——路由器與TCP/IP模型

補充拓撲圖&#xff08;交換機串聯通信&#xff09;電腦A——交換機S1——交換機S2——電腦B問&#xff1a;A和B如何通信&#xff1f;首先A會將通信的數據封裝好&#xff0c;將源端口、目標端口&#xff0c;源地址、目標地址&#xff0c;源MAC、目標MAC封裝起來&#xff0c;但是…

【Android】ViewBinding(視圖綁定)

一、什么是ViewBindingViewBinding是Android Studio 3.6推出的新特性&#xff0c;旨在替代findViewById(內部實現還是使用findViewById)。通過ViewBinding&#xff0c;可以更輕松地編寫可與視圖交互的代碼。在模塊中啟用ViewBinding之后&#xff0c;系統會為該模塊中的每個 XML…

泛型與類型安全深度解析及響應式API實戰

一、泛型通配符&#xff1a;靈活與安全的平衡術 在Java動物收容所系統中&#xff0c;我們常需要處理不同動物類型的集合。通過泛型通配符&#xff0c;可以構建更靈活的API&#xff1a; class Shelter<T extends Animal> {private List<T> animals new ArrayList&l…

Cookie 與 Session概述

在 Web 開發中&#xff0c;會話跟蹤是一個核心問題。HTTP 協議是無狀態的&#xff0c;這意味著服務器無法直接記住客戶端的狀態。而 Cookie 和 Session 技術的出現&#xff0c;正是為了解決這一難題。一、Cookie概述Cookie&#xff0c;翻譯成中文是小甜點、小餅干的意思。在 HT…

阿里云alicloud liunux3-安裝docker

你這個錯誤&#xff1a;Curl error (35): SSL connect error for https://download.docker.com/linux/centos/8/x86_64/stable/... Error: Failed to download metadata for repo docker-ce-stable: Yum repo downloading error說明你的機器訪問 download.docker.com 的 HTTPS …

【世紀龍科技】汽車故障診斷與排除仿真教學軟件

在汽車產業智能化、電動化轉型加速的今天&#xff0c;汽車維修行業對技術人才的要求已從傳統經驗型向“理論實踐數字化”復合型轉變。然而&#xff0c;實車實訓成本高、安全隱患大、教學場景受限等問題&#xff0c;始終制約著職業教育的高質量發展。江蘇世紀龍科技有限公司立足…

柴油機活塞cad【4張】三維圖+設計說明書

1015柴油機活塞結構設計及溫度場分析 摘 要 隨著科研的進步&#xff0c;內燃機技術得到了快速的發展&#xff0c;低排放高效率的內燃機的發展成為內燃機發展的主要趨勢&#xff0c;活塞作為內燃機的主要組成部件&#xff0c;在內燃機中扮演著至關重要的作用。活塞在內燃機中始終…