【二刷代碼隨想錄】雙指針-數組相關題型、推薦習題

一、雙指針-數組 相關題型與常用思路

1、單個數組

(1)原地移除元素類

? ? ? ? 如推薦習題中的(1)、(2)、(3),都屬于此類。引入雙指針 pre、last ,用 pre 指針表明數組的最后位置;用 last 指針結合 for 遍歷數組,去尋找不符合題意的元素,將其插入有效數組中,也就是 pre 位置,從而達到原地處理的要求。

????????以題(2)為例:

class Solution {public int removeDuplicates(int[] nums) {//慢指針:指向最終數組的最后元素int low = 0;//在比較中將第一個元素視為不同元素int res = 1;//快指針從1開始,因為要默認保存第一個元素,后面的元素再進行比較for(int fast = 1; fast < nums.length; fast++){//若重合,則過濾不保存;除非不重合,則保存該元素if(nums[fast] != nums[low]){res++;low++;nums[low] = nums[fast];}}return res;}
}

(2)特殊規則處理元素

? ? ? ? 如推薦習題中的(5),若要實現時間復雜度為 O(n),必然是使用雙指針的。用雙指針從數組的兩側往中間位置移動,直到遍歷完所有元素。

class Solution {public int[] sortedSquares(int[] nums) {int len = nums.length;int[] res = new int[len];int i,j,x;i = 0;j = len - 1;x = len - 1;//從兩端往中間依次判定while(i <= j){if(Math.abs(nums[i]) >= Math.abs(nums[j])){res[x] = nums[i] * nums[i];i++;}else{res[x] = nums[j] * nums[j];j--;}x--;}return res;}
}

(3)滑動窗口--待補充

2、兩個數組

????????一定規則下,比較兩數組之間的關系,大多是相等關系。

????????如推薦習題中的(4),若要實現時間復雜度為 O(m+n),必然是使用雙指針的。結合提意,此題需要從尾部開始遍歷,遇見特殊字符時,做好標記,以便直接跳過后續的字符。

class Solution {public boolean backspaceCompare(String s, String t) {int sLen = s.length();int tLen = t.length();int p1 = sLen - 1;int p2 = tLen - 1;int skipS = 0;int skipT = 0;//倒序處理字符串while(p1 >= 0 || p2 >= 0){while(p1 >= 0){if(s.charAt(p1) == '#'){    //  為退格符,則增加退格符數量skipS++;p1--;}else{                      if(skipS > 0){           //  為字母,且退格符數量為正數,則減少退格符數量   skipS--;p1--;}else{                  //  為字母,且退格符數量為0,則退出當輪循環break;}}}while(p2 >= 0){if(t.charAt(p2) == '#'){    //  為退格符,則增加更退格符數量skipT++;p2--;}else{                      if(skipT > 0){          //  為字母,且退格符數量為正數,則減少退格符數量  skipT--;p2--;}else{                  //  為字母,且退格符數量為0,則退出當輪循環break;}}}if(p1 >= 0 && p2 >= 0){         //對比兩個字符串中有效字符是否相同if(s.charAt(p1) == t.charAt(p2)){p1--;p2--;}else{return false;} }else if(p1 < 0 && p2 >= 0 || p1 >= 0 && p2 < 0){   //或有一方已為空,而另一方不為空【若不處理會導致死循環!!】return false;}}if(p1 > 0 || p2 > 0){               //若經過上述比較,仍然存在至少一方不為空,則表明兩字符不相同return false;}return true;}
}

二、推薦習題

(1)原地 移除元素

????????27.移除元素

????????給你一個數組?nums?和一個值?val,你需要?原地?移除所有數值等于?val?的元素。元素的順序可能發生改變。然后返回?nums?中與?val?不同的元素的數量。

????????假設?nums?中不等于?val?的元素數量為?k,要通過此題,您需要執行以下操作:

  • 更改?nums?數組,使?nums?的前?k?個元素包含不等于?val?的元素。nums?的其余元素和?nums?的大小并不重要。
  • 返回?k

(2)原地 刪除有序數組的重復項

????????26.刪除排序數組中的重復項

????????給你一個?非嚴格遞增排列?的數組?nums?,請你?原地?刪除重復出現的元素,使每個元素?只出現一次?,返回刪除后數組的新長度。元素的?相對順序?應該保持?一致?。然后返回?nums?中唯一元素的個數。

????????考慮?nums?的唯一元素的數量為?k?,你需要做以下事情確保你的題解可以被通過:

  • 更改數組?nums?,使?nums?的前?k?個元素包含唯一元素,并按照它們最初在?nums?中出現的順序排列。nums?的其余元素與?nums?的大小不重要。
  • 返回?k?。

(3)原地 移除目標值到數組末尾

????????283.移動零

(4)比較有效字符串

????????844.比較含退格的字符串

(5)對有序數組元素的平方值,形成新有序數組

????????977.有序數組的平方

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

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

相關文章

Level DB --- TableCache

TableCache 是Level DB 中重要的類&#xff0c;Level DB 中多層&#xff08;multi level&#xff09;&#xff0c;且每一層&#xff08;level&#xff09;有多個 key-value file&#xff0c;TableCache正是用來緩存多層以及多層中的file數據&#xff0c;更快速地檢索。 table …

搜索-BFS

馬上藍橋杯了&#xff0c;最近刷了廣搜&#xff0c;感覺挺有意思的&#xff0c;廣搜題類型都差不多&#xff0c;模板也一樣&#xff0c;大家寫的時候可以直接套模板 這里給大家講一個比較經典的廣搜題-迷宮 題目問問能否走到 (n,m) 位置&#xff0c;假設最后一個點是我們的&…

智能預測維護:讓設備“未卜先知”,減少宕機煩惱

智能預測維護:讓設備“未卜先知”,減少宕機煩惱 1. 引言:設備維護的痛點與出路 在工業生產和自動化領域,設備故障一直是令人頭疼的問題。設備一旦故障,輕則影響生產效率,重則造成嚴重損失,甚至帶來安全隱患。傳統的設備維護方式主要有兩種: 被動維護(Reactive Maint…

安卓的布局方式

一、RelativeLayout 相對布局 特點&#xff1a;每個組件相對其他的某一個組件進行定位。 (一)主要屬性 1、設置和父組件的對齊&#xff1a; alignParentTop &#xff1a; 設置為true&#xff0c;代表和父布局頂部對齊。 其他對齊只需要改變后面的Top為 Left、Right 或者Bottom&…

SSM中藥分類管理系統

&#x1f345;點贊收藏關注 → 添加文檔最下方聯系方式咨詢本源代碼、數據庫&#x1f345; 本人在Java畢業設計領域有多年的經驗&#xff0c;陸續會更新更多優質的Java實戰項目希望你能有所收獲&#xff0c;少走一些彎路。&#x1f345;關注我不迷路&#x1f345; 項目視頻 SS…

epoch、batch、batch size、step、iteration深度學習名詞含義詳細介紹

卷積神經網絡訓練中的三個核心概念&#xff1a;Epoch、Batch Size 和迭代次數 在深度學習中&#xff0c;理解一些基本的術語非常重要&#xff0c;這些術語對模型的訓練過程、效率以及最終性能都有很大影響。以下是一些常見術語的含義介紹&#xff1a; 1. Epoch&#xff08;周…

React(七):Redux

Redux基本使用 純函數&#xff1a;1.函數內部不能依賴函數外部變量&#xff1b;2.不能產生副作用&#xff0c;在函數內部改變函數外部的變量 React只幫我們解決了DOM的渲染過程&#xff0c;State還是要由我們自己來管理——redux可幫助我們進行管理 Redux三大特點 1.單一數…

《Android低內存設備性能優化實戰:深度解析Dalvik虛擬機參數調優》

1. 痛點分析&#xff1a;低內存設備的性能困局 現象描述&#xff1a;大應用運行時頻繁GC導致卡頓 根本原因&#xff1a;Dalvik默認內存參數與硬件資源不匹配 解決方向&#xff1a;動態調整堆內存參數以平衡性能與資源消耗 2. 核心調優參數全景解析 關鍵參數矩陣&#xff1…

STC89C52單片機學習——第38節: [17-2] 紅外遙控紅外遙控電機

寫這個文章是用來學習的,記錄一下我的學習過程。希望我能一直堅持下去,我只是一個小白,只是想好好學習,我知道這會很難&#xff0c;但我還是想去做&#xff01; 本文寫于&#xff1a;2025.03.30 51單片機學習——第38節: [17-2] 紅外遙控&紅外遙控電機 前言開發板說明引用…

計算機組成原理————計算機運算方法精講<1>原碼表示法

第一部分:無符號數和有符號數的概念 1.無符號數 計算機中的數均存放在寄存器當中,通常稱寄存器的位數為機器字長,所謂無符號數,就是指沒有fu5號的數,在寄存器中的每一位均可用來存放數值,當存放有符號數時,需要留出位置存放符號,機器字長相同時,無符號數與有符號數所…

【什么是機器學習——多項式逼近】

什么是機器學習——多項式逼近 機器學習可以分成三大類別,監督學習、非監督學習、強化學習。三大類別背后的數學原理不同。監督學習使用了數學分析中的函數逼近方法和概率統計中的極大似然方法;非監督學習使用聚類和EM算法;強化學習使用馬爾可夫決策過程的想法。 機器學習的…

Ubuntu 22.04 上安裝阿里云 CLI(命令行工具)

在 Ubuntu 22.04 上安裝阿里云 CLI&#xff08;命令行工具&#xff09;可以通過以下步驟完成&#xff1a; 步驟 1&#xff1a;下載阿里云 CLI 安裝包 打開終端&#xff0c;首先更新你的軟件包索引&#xff1a; sudo apt update安裝 curl&#xff08;如果還沒有安裝&#xff09…

?Android Gradle 插件(AGP)版本與 ?Gradle 版本需要嚴格對應

一、AGP 與 Gradle 版本對照表 Android Gradle 插件版本對應 Gradle 版本適用 Android Studio 版本?8.1.x8.2Arctic Fox (2020.3.1+)?8.0.x8.0Arctic Fox (2020.3.1+)?7.4.x7.5.1IntelliJ IDEA 2022+?7.3.x7.4IntelliJ IDEA 2022+?7.2.x7.3.3IntelliJ IDEA 2021.3+?7.1.x…

【Matlab】-- 基于MATLAB的灰狼算法優化支持向量機的回歸算法

文章目錄 文章目錄 01 內容概要02 GWO-SVR模型03 部分代碼04 運行結果05 參考文獻06 代碼下載 01 內容概要 GWOSVR&#xff08;基于灰狼算法優化的支持向量機回歸&#xff09;是一種先進的機器學習技術&#xff0c;它結合了灰狼優化算法&#xff08;Grey Wolf Optimizer, GWO…

Google Play Games PC版即將正式上線!

早在 2021 年&#xff0c;谷歌就推出 Google Play Games PC 版&#xff0c;本質上是基于虛擬化創建安卓系統在 Windows 上運行 Google Play 平臺的各種游戲。 在測試了 4 年后&#xff0c;谷歌準備在今年晚些時候正式上線該平臺&#xff0c;谷歌將在下周舉辦 2025 游戲開發者大…

【SpringBoot】深入解析使用配置文件解決硬編碼問題綜合練習(三):解析驗證碼拓展問題

校驗輸入驗證碼接口 check( ) 5. 為什么要用靜態內部類接收配置文件中的 Seisson 對象&#xff1f; 為什么我們接收配置文件的 Session 對象時&#xff0c;使用靜態內部類給 Session 對象的 key&#xff0c;date 屬性賦值呢&#xff1f;不加 static 可以嗎&#xff1f; 在 Cap…

day16 學習筆記

文章目錄 前言一、廣播機制二、數組遍歷1.for循環2.nditer函數 三、數組操作1.reshape函數2.flat屬性3.flatten函數4.revel函數5.數組轉置6.升維與降維7.數組的連接與分割8.數組運算 前言 通過今天的學習&#xff0c;我進一步掌握了更多numpy的語法知識 一、廣播機制 廣播&am…

使用FastExcel時的單個和批量插入的問題

在我們用excel表進行插入導出的時候&#xff0c;通常使用easyexcel或者FastExcel&#xff0c;而fastexcel是easy的升級版本&#xff0c;今天我們就對使用FastExcel時往數據庫插入數據的業務場景做出一個詳細的剖析 場景1 現在我們數據庫有一張組織表&#xff0c;組織表的字段…

Cannot find a valid baseurl for repo: centos-sclo-sclo/x86_64

? rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-latest-5.0.el7.noarch.rpmyum clean allyum macache fast? 編輯配置文件 /etc/yum.repos.d/zabbix.repo and enable zabbix-frontend repository. [zabbix-frontend]...enabled1... 下載相關…

AI基礎02-圖片數據采集

上篇文章我們學習了文本的數據采集&#xff0c;今天主要了解一下圖片數據采集的方法。圖片采集方法通常有網頁采集和實時采集&#xff08;傳感器采集&#xff09;兩種。我們學習一下如何利用python 工具和筆記本計算機攝像頭進行圖片數據的實時采集。 1&#xff09;cv2庫簡介 …