leetcode 3.1

leetcode hot 100

    • 雙指針
      • 1.三數之和
      • 2.接雨水
    • 多維動態規劃
      • 1.最長公共子序列

雙指針

1.三數之和

三數之和
排序 + 雙指針的方法,固定一個數nums[i], 用兩數和找target -= nums[i] 的數需要注意兩點:

1.需要去掉重復數字

while (l < r && nums[l] == nums[--l]);
while (l < r && nums[r] == nums[++r]);
....
while (i < n - 1 && nums[i] == nums[i + 1]) i++;

2.如果用這種方法去掉重復數字,那么一定要先執行 l++ && r–再去執行去重,防止有不重復數字死循環的情況發生

l++, r--;
while (l < r && nums[l] == nums[l - 1]) l++;
while (l < r && nums[r] == nums[r + 1]) r--;
class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {sort(nums.begin(), nums.end());int n = nums.size();vector<vector<int>> ans;for (int i = 0; i < n; i++) {int l = i + 1, r = n - 1;int tmptar = -nums[i];while (l < r) {if (nums[l] + nums[r] < tmptar) {l++;} else if (nums[l] + nums[r] > tmptar) {r--;} else {ans.push_back({nums[i], nums[l], nums[r]});l++, r--;while (l < r && nums[l] == nums[l - 1]) l++;while (l < r && nums[r] == nums[r + 1]) r--;}}while (i < n - 1 && nums[i] == nums[i + 1]) i++;}return ans;}
};

2.接雨水

接雨水

  1. 圖1位置的水位由2,3位置決定
    在這里插入圖片描述
  2. 雙指針相向尋找,需要找到當前遍歷過的、左右兩側的最大高度l_max, r_max
  3. 如果 l_max 小于 r_max,那么左側一定能夠積水,如果 l_max 大于 r_max,右側一定能夠積水
  4. 左側,只有當前的高度height[l] < l_max時才能夠有積水,否則例如 [0,1,2,3,4,5]是沒辦法形成積水的
  5. 同理,右側,只有當前的高度height[r] < r_max時才能夠有積水
class Solution {
public:int trap(vector<int>& height) {int n = height.size();int l = 0, r = n - 1, l_max = 0, r_max = 0, ans = 0;while (l <= r) {if (l_max < r_max) {l_max = max(l_max, height[l]);if (l_max > height[l]) {ans += l_max - height[l];}l++; } else {r_max = max(r_max, height[r]);if (r_max > height[r]) {ans += r_max - height[r];}r--;}}return ans;}
};

多維動態規劃

1.最長公共子序列

1)確定狀態:對于兩個字符串的動態規劃問題,套路是通用的。
比如說對于字符串 s1 和 s2,它們的長度分別是 m、n,一般來說都要構造一個這樣的 DP table:dp[m + 1][n + 1]

2)轉移方程:對于 text1:abcde 和 text2:ace 兩個字符串,我們定義兩個指針進行遍歷 i 和 j。

遍歷 text1 長度為 m,定義指針 i,從 0~m。固定 i 指針(i == 1)位置,接下來開始遍歷 text2 長度為 n,定義指針 j,從 0~n。
在這里插入圖片描述
第一次遍歷 i = 1, j = 1,兩個a相同所以 dp[1][1] = 1
第二次遍歷 i = 1, j = 2,a與c不等,也不能是0,這里需轉換成 a 與 ac 最長子序列,這里需要把之前的關系傳遞過來,所以dp[1][2] = 1
第三次遍歷 i = 1, j = 3,a與e不相同,把之前的關系傳遞過來,所以dp[1][3] = 1
text2:ace 已經走完來第一輪,接下來text1:abcde 走到來b字符。

第四次遍歷 i = 2, j = 1,就是需要比較ab與a的最長子串,把之前的關系傳遞過來,所以dp[2][1] = 1

我們會發現遍歷兩個串字符,當不同時需要考慮兩層遍歷前面的值(關系傳遞),也就是左邊和上邊的其中較大的值,當相同時,需要考慮各自不包含當前字符串的子序列長度,再加上1。

因此可以得出:
現在對比的這兩個字符不相同的,那么我們要取它的「要么是text1往前退一格,要么是text2往前退一格,兩個的最大值」
dp[i + 1][j + 1] = max(dp[i+1][j], dp[i][j+1]);
對比的兩個字符相同,去找它們前面各退一格的值加1即可:dp[i+1][j+1] = dp[i][j] + 1;

3)邊界條件:dp[0][X] = 0, dp[X][0] = 0;

4)計算順序:先行后列

class Solution {
public:int longestCommonSubsequence(string text1, string text2) {int n = text1.size(), m = text2.size();vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0));for (int i = 1; i < n + 1; i++) {for (int j = 1; j < m + 1; j++)if (text1[i - 1] == text2[j - 1])dp[i][j] = dp[i - 1][j - 1] + 1;else dp[i][j] = max(dp[i - 1][j], dp[i][j -1]);}return dp[n][m];}
};

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

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

相關文章

社交APP開發能給用戶帶來什么

現在的社交軟件也非常的多&#xff0c;每款社交軟件都有自己的特色&#xff0c;社交軟件是日常中必備的軟件&#xff0c;不管是生活交流還是感情工作交流都是比較方便的&#xff0c;因為社交軟件滿足了日常的遠程交流問題&#xff0c;所以開發社交軟件也會逐漸的流行起來的。 …

Error: T doesn‘t have .length

Error: T doesn‘t have .length 在 TypeScript 中&#xff0c;當我們使用泛型 <T> 時&#xff0c;有時會遇到一個常見問題&#xff1a;編譯器提示錯誤&#xff0c;指出泛型類型 T 不具備 .length 屬性。在本文中&#xff0c;我們將探討這個問題的解決方案&#xff0c;并…

【Qt學習】QLCDNumber的介紹與實例使用(倒計時功能)

文章目錄 1. 介紹2. 實例 - QLCDNumber倒計時3. 資源文件 1. 介紹 QLCDNumber是Qt框架中用于顯示數字的控件&#xff0c;它模擬了一個液晶數字顯示屏。 在Designer界面中顯示如下&#xff1a; 有以下 常用屬性&#xff1a; 屬性描述intValue獲取或設置QLCDNumber顯示的整數…

Redis高級特性詳解:事務處理、發布訂閱、持久化和集群

Redis&#xff08;Remote Dictionary Server&#xff09;是一個開源的基于內存的數據結構存儲系統&#xff0c;被廣泛應用于緩存、隊列、計數器等場景中。除了基本的鍵值存儲功能外&#xff0c;Redis還提供了許多高級特性&#xff0c;包括事務處理、發布訂閱、持久化和集群。在…

js截取圖片地址后面的參數和在路徑中截取文件名或后綴名

文章目錄 前言截取地址 &#xff1f;后面的參數在路徑中截取文件名或后綴名總結 前言 在處理網頁上的圖片資源或者其他類型的文件資源時&#xff0c;你可能會遇到需要使用這些技巧的情況。以下是一些具體的使用場景&#xff1a; 動態修改圖片參數&#xff1a;如果你有一個圖片U…

【BBuf的CUDA筆記】十四,OpenAI Triton入門筆記三 FusedAttention

0x0. 前言 繼續Triton的學習&#xff0c;這次來到 https://triton-lang.org/main/getting-started/tutorials/06-fused-attention.html 教程。也就是如何使用Triton來實現FlashAttention V2。對于FlashAttention和FlashAttention V2網上已經有非常多的介紹了&#xff0c;大家如…

Win11系統安裝安卓子系統教程

隨著Win11系統的不斷普及&#xff0c;以及硬件設備的更新換代&#xff0c;我相信很多同學都已經更新并使用到了最新的Win11系統。那么&#xff0c;Win11系統最受期待的功能“Windows Subsystem for Android”&#xff08;簡稱WSA&#xff09;&#xff0c;即《安卓子系統》。他可…

spring.factories的常用配置項

概述 spring.factories 實現是依賴 spring-core 包里的 SpringFactoriesLoader 類&#xff0c;這個類實現了檢索 META-INF/spring.factories 文件&#xff0c;并獲取指定接口的配置的功能。 Spring Factories機制提供了一種解耦容器注入的方式&#xff0c;幫助外部包&am…

掘根寶典之C語言字符串輸入函數(gets(),fgets(),get_s())

字符串輸入前的注意事項 如果想把一個字符串讀入程序&#xff0c;首先必須預留該字符串的空間&#xff0c;然后用輸入函數獲取該字符串 這意味著必須要為字符串分配足夠的空間。 不要指望計算機在讀取字符串時順便計算它的長度&#xff0c;然后再分配空間(計算機不會這樣做&a…

ai圖生文的軟件!分享4個受歡迎的!

在數字化時代&#xff0c;隨著人工智能技術的飛速發展&#xff0c;AI圖生文軟件已經成為自媒體人、創作者和廣告從業者手中的得力助手。這些軟件能夠將靜態的圖片轉化為生動的文字&#xff0c;為圖片注入靈魂&#xff0c;讓觀者仿佛置身于畫面之中。今天&#xff0c;就讓我們一…

LabVIEW和Python開發微細車削控制系統

LabVIEW和Python開發微細車削控制系統 為滿足現代精密加工的需求&#xff0c;開發了一套基于LabVIEW和Python的微細車削控制系統。該系統通過模塊化設計&#xff0c;實現了高精度的加工控制和G代碼的自動生成&#xff0c;有效提高了微細車削加工的自動化水平和編程效率。 項目…

cjson報錯

今天遇到個問題&#xff0c;使用CJSON把一個cjson對象給一個cjson對象的時候報錯&#xff0c;是segment問題 &#xff0c;原因是我在個cjson對象數據的時候&#xff0c;有幾個是char的&#xff0c;但是是個時間的字符串&#xff0c;一般20位就夠了&#xff0c;但是由于是通過mo…

1950-2022年各省逐年平均降水量數據

1950-2022年各省逐年平均降水量數據 1、時間&#xff1a;1950-2022年 2、指標&#xff1a;省逐年平均降水量 3、范圍&#xff1a;33省&#xff08;不含澳門&#xff09; 4、指標解釋&#xff1a;逐年平均降水數據是指當年的日降水量的年平均值&#xff0c;不是累計值&#…

ONLYOFFICE 桌面編輯器 v8.0 更新內容詳細攻略

文章目錄 引言PDF 表單RTL 支持電子表格中的新增功能Moodle 集成用密碼保護 PDF 文件從“開始”菜單快速創建文檔本地界面主題下載安裝桌面編輯工具總結 引言 官網鏈接&#xff1a; ONLYOFFICE 官方網址 ONLYOFFICE 桌面編輯器是一款免費的文檔處理軟件&#xff0c;適用于 Li…

面試經典 150 題 ---- 買賣股票的最佳時機 II

面試經典 150 題 ---- 買賣股票的最佳時機 II 買賣股票的最佳時機II方法一&#xff1a;貪心 買賣股票的最佳時機II 方法一&#xff1a;貪心 貪心策略&#xff0c;我們可以考慮局部最優以達到整體最優&#xff0c;僅需要判斷相鄰兩天之間的利潤是否大于 0&#xff0c;若大于 0…

uniapp實現-審批流程效果

一、實現思路 需要要定義一個變量, 記錄當前激活的步驟。通過數組的長度來循環數據&#xff0c;如果有就采用3元一次進行選擇。 把循環里面的變量【name、status、time】, 全部替換為取出的那一項的值。然后繼續下一次循環。 虛擬的數據都是請求來的, 組裝為好渲染的格式。 二…

【打工日常】使用docker部署在線PDF工具

一、Stirling-PDF介紹 Stirling-PDF是一款功能強大的本地托管的基于 Web 的 PDF 操作工具&#xff0c;使用 docker部署。該自托管 Web 應用程序最初是由ChatGPT全權制作的&#xff0c;現已發展到包含廣泛的功能來處理您的所有 PDF 需求。允許對 PDF 文件執行各種操作&#xff0…

基于session注冊JAva篇springboot

springboot3全家桶&#xff0c;數據庫 &#xff1a;redis&#xff0c;mysql 背景環境&#xff1a;郵箱驗證碼&#xff0c;驗證注冊 流程&#xff1a;先通過郵箱驗證&#xff0c;發送驗證碼&#xff0c;將獲取到的session和驗證碼&#xff0c;存入redis里&#xff08;發送郵箱…

【leetcode】鏈表的回文結構

大家好&#xff0c;我是蘇貝&#xff0c;本篇博客帶大家刷題&#xff0c;如果你覺得我寫的還不錯的話&#xff0c;可以給我一個贊&#x1f44d;嗎&#xff0c;感謝?? 點擊查看題目 思路: 1.找中間節點 找中間節點的方法在下面這個博文中詳細提過 【點擊進入&#xff1a;【l…

鴻蒙Harmony應用開發—ArkTS聲明式開發(通用屬性:布局約束)

通過組件的寬高比和顯示優先級約束組件顯示效果。 說明&#xff1a; 從API Version 7開始支持。后續版本如有新增內容&#xff0c;則采用上角標單獨標記該內容的起始版本。 aspectRatio aspectRatio(value: number) 指定當前組件的寬高比。 卡片能力&#xff1a; 從API vers…