【每日算法】移除元素 LeetCode

雙指針方法是解決數組或鏈表問題中非常高效的技巧之一,尤其適用于原地修改數組減少時間復雜度的場景。以下是對雙指針方法的詳細講解。

1. 雙指針方法的核心思想

雙指針方法通常使用兩個指針(或索引)在數組或鏈表中協同工作,通過一次遍歷完成任務。常見的雙指針模式包括:

  • 快慢指針:一個指針用于遍歷(快指針),另一個指針用于標記目標位置(慢指針)。
  • 左右指針:一個指針從頭部開始,另一個從尾部開始,向中間移動。

在?RemoveElement?問題中,使用的是快慢指針

2. 問題描述

給定一個數組?nums?和一個值?val?,需要原地移除所有等于?val?的元素,并返回新數組的長度。要求:

  • 空間復雜度為?O(1)?(不能使用額外數組)。
  • 不需要考慮新數組長度之后的元素。

3. 雙指針實現步驟

(1) 初始化指針
  • 慢指針?index?:指向下一個有效元素的存儲位置(初始為?0?)。
  • 快指針?i?:用于遍歷數組(初始為?0?)。
(2) 遍歷數組
  • 快指針?i?從?0?開始,逐個檢查數組元素。
  • 如果?nums[i] != val?,說明這是一個需要保留的元素:
    • 將其賦值給?nums[index]?。
    • 慢指針?index?右移一位。
  • 如果?nums[i] == val?,直接跳過(快指針繼續右移)。
(3) 終止條件
  • 快指針?i?遍歷完整個數組后,慢指針?index?的值即為新數組的長度。

4. 代碼實現

public int RemoveElement(int[] nums, int val)
{int index = 0; // 慢指針for (int i = 0; i < nums.Length; i++) // 快指針 i{if (nums[i] != val){nums[index] = nums[i]; // 保留該元素index++; // 慢指針右移}}return index; // 新數組長度
}

5. 示例分析

以?nums = [3, 2, 2, 3]?,?val = 3?為例:

步驟快指針?inums[i]操作數組狀態慢指針?index
103跳過[3, 2, 2, 3]0
212nums[0] = 2[2, 2, 2, 3]1
322nums[1] = 2[2, 2, 2, 3]2
433跳過[2, 2, 2, 3]2

最終返回?index = 2?,新數組為?[2, 2, ...]?(后續元素無需關心)。

6. 復雜度分析

  • 時間復雜度:?O(n)?,只需遍歷一次數組。
  • 空間復雜度:?O(1)?,僅使用常數級別的額外空間。

7. 雙指針的適用場景

  1. 原地修改數組:如刪除重復項、移除特定元素。
  2. 鏈表問題:如判斷環形鏈表、找到中間節點。
  3. 有序數組:如兩數之和、合并有序數組。

8. 總結

雙指針方法是解決數組/鏈表問題的利器,核心在于:

  • 明確指針的分工(快指針遍歷,慢指針標記)。
  • 注意邊界條件(如空數組、全部元素需刪除)。
  • 靈活選擇變體(如交換法優化)。

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

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

相關文章

Android 項目:畫圖白板APP開發(六)——分頁展示

本篇將介紹如何為我們的畫板應用添加分頁展示功能&#xff0c;讓用戶可以創建多個畫布并在它們之間輕松切換。這章沒有啥知識點的講解&#xff0c;主要介紹一下每頁保存的數據結構是什么樣的。 一、ListView 多頁數據的管理我們使用ListView。之前有文章講過ListView這里就不多…

智能眼鏡產品成熟度分析框架與評估

引言 當前(2025年9月12日),智能眼鏡(Smart Glasses)市場正處于快速演進階段,從早期的新奇設備向主流消費電子轉型。AI整合、AR顯示和多模態交互的進步推動了這一轉變。根據最新數據,2025年AI眼鏡發貨量預計達686萬臺,同比增長265%,全球市場規模從2024年的約19.3億美元…

(網絡編程)網絡編程套接字 UDP的socket API 代碼解析

網絡編程基礎 為什么需要網絡編程?--豐富的網絡資源 用戶在瀏覽器中,打開在線視頻網站,如優酷看視頻,實質是通過網絡,獲取到網絡上的一個視頻資源。與本地打開視頻文件類似,只是視頻文件這個資源的來源是網絡。 相比本地資源來說,網絡提供了更為豐富的網絡資源:所謂的網絡資源…

【STM32】狀態機(State Machine)

這篇博客介紹 狀態機&#xff08;State Machine&#xff09;&#xff0c;適合用于嵌入式開發、驅動開發、協議解析、按鍵識別等多種場景。 一、什么是狀態機&#xff08;State Machine&#xff09;&#xff1f; 狀態機&#xff08;State Machine&#xff09;是一種用于描述系統…

深度學習在離崗檢測中的應用

離崗檢測技術正逐步成為現代企業精細化管理和安全生產的重要工具。這項基于計算機視覺和人工智能的應用&#xff0c;通過自動化、實時化的監測方式&#xff0c;有效提升了工作紀律性和運營效率&#xff0c;為項目管理者和企業提供了創新的監管解決方案。在許多工作場景中&#…

Spring緩存(二):解決緩存雪崩、擊穿、穿透問題

1. 緩存穿透問題與解決方案 1.1 什么是緩存穿透 緩存穿透是指查詢一個不存在的數據&#xff0c;由于緩存中沒有這個數據&#xff0c;每次請求都會直接打到數據庫。 如果有惡意用戶不斷請求不存在的數據&#xff0c;就會給數據庫帶來巨大壓力。 這種情況下&#xff0c;緩存失去了…

PHP 與 WebAssembly 的 “天然隔閡”

WebAssembly&#xff08;簡稱 WASM&#xff09;是一種低級二進制指令格式&#xff0c;旨在為高級語言提供高性能的編譯目標&#xff0c;尤其在瀏覽器環境中實現接近原生的執行效率。它主要用于前端性能密集型場景&#xff08;如游戲引擎、視頻編解碼、3D 渲染等&#xff09;&am…

unity中通過拖拽,自定義scroll view中子物體順序

1.在每個content的子物體上掛載DragHandler腳本&#xff0c;并且添加Canvs Group組件&#xff0c;設置見圖2.DragHandler腳本內容&#xff1a;using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using System.Collections.Generic; using System.Coll…

用 Matplotlib 繪制餅圖:從基礎語法到實戰美化,全面掌握分類數據可視化技巧

用 Matplotlib 繪制餅圖:從基礎語法到實戰美化,全面掌握分類數據可視化技巧 在數據分析與可視化的世界里,**“圖勝千言”**早已成為共識。而在眾多圖表類型中,餅圖(Pie Chart)以其直觀的比例展示方式,成為展示分類數據分布的常見選擇。無論是業務報表、用戶畫像,還是市…

基礎算法之二分算法 --- 2

大家好&#xff0c;不同的時間&#xff0c;相同的地點&#xff0c;時隔多日我們又見面了。繼上次的二分算法后&#xff0c;我們這次要來學習的是二分答案了。這個部分相較于前面的二分算法難度有相當的提升&#xff0c;希望大家有所準備。雖然難度增加了&#xff0c;但是博主還…

發揮nano banana的最大能力

1. 概述Nano Banana 簡介&#xff1a;Nano Banana 是 Google DeepMind 開發的 AI 圖像生成與編輯模型&#xff0c;集成在 Google Gemini 平臺中&#xff08;具體為 Gemini 2.5 Flash 版本&#xff09;。它以高效的圖像編輯能力聞名&#xff0c;尤其在角色一致性、光影理解和快速…

leetcode 面試題01.02判定是否互為字符重排

一、問題描述二、解題思路解法一&#xff1a;對s1和s2進行sort排序&#xff0c;返回s1是否等于s2&#xff1b;解法二&#xff1a;用哈希表分別來記錄s1和s2中字符出現的次數&#xff0c;統計完后&#xff0c;判斷兩個哈希表是否相等;三、代碼實現解法一&#xff1a;時間復雜度&…

Python Yolo8 物體識別

支持單張圖片/圖片目錄批量預標注 默認使用cuda GPU .env HTTP_PROXYhttp://192.168.2.109:10808 HTTPS_PROXYhttp://192.168.2.109:10808pyproject.toml [project] name "yolo-test" version "0.1.0" description "Add your description here&quo…

LeetCode100-234回文鏈表

本文基于各個大佬的文章上點關注下點贊&#xff0c;明天一定更燦爛&#xff01;前言Python基礎好像會了又好像沒會&#xff0c;所有我直接開始刷leetcode一邊抄樣例代碼一邊學習吧。本系列文章用來記錄學習中的思考&#xff0c;寫給自己看的&#xff0c;也歡迎大家在評論區指導…

BUG排查流程

引言簡述Bug排查的重要性分享個人或團隊在Bug排查中的常見挑戰引出日記形式記錄的價值日記格式設計時間戳&#xff1a;記錄問題發現和解決的時間節點問題描述&#xff1a;清晰定義Bug的現象和影響范圍環境信息&#xff1a;操作系統、版本號、依賴庫等關鍵配置復現步驟&#xff…

汽車功能安全 Functional Safety ISO 26262 測試之一

汽車電子電氣系統的日益復雜使得功能安全成為保障車輛可靠性和駕乘安全的關鍵。 本文將圍繞ISO 26262標準的核心內容展開&#xff0c;幫助大家理解如何通過系統化的方法控制風險&#xff0c;進行測試&#xff0c;確保產品安全。 01 什么是功能安全&#xff1f; 首先&#xff0c…

人形機器人賽道的隱形勝負手:低延遲視頻鏈路如何決定機器人未來

一、引言&#xff1a;爆發前夜的人形機器人賽道 2025 年&#xff0c;被業內稱為“人形機器人量產元年”。政策與資本的合力&#xff0c;讓這條原本還帶著科幻色彩的產業賽道&#xff0c;驟然進入現實加速期。國家層面&#xff0c;《“機器人”行動計劃》明確提出要推動人形機器…

從iPhone 17取消SIM卡槽,看企業如何告別“數據孤島”

9月10日&#xff0c;蘋果公司如期召開秋季新品發布會&#xff0c;正式推出iPhone 17系列。除了性能和拍照的常規升級&#xff0c;一個看似不起眼但意義深遠的改變引起了廣泛關注——iPhone 17 Pro系列全面取消了實體SIM卡槽&#xff0c;只保留了eSIM功能。這一舉動不僅僅是技術…

【JavaWeb01】Web介紹

文章目錄1.導學2.Web開發介紹2.1 Web網站的工作流程2.2 前后端分離開發1.導學 2.Web開發介紹 2.1 Web網站的工作流程 瀏覽器根據請求的域名請求對應的前端服務器&#xff0c;前端服務器接收到請求之后&#xff0c;把對應的前端代碼返回給服務器。瀏覽器中有解析前端代碼的解析引…

鏈路預測算法MATLAB實現

鏈路預測算法MATLAB實現 鏈路預測是復雜網絡分析中的重要任務&#xff0c;旨在預測網絡中尚未連接的兩個節點之間未來產生連接的可能性。 程序概述 MATLAB程序實現了以下鏈路預測算法&#xff1a; 基于局部信息的相似性指標&#xff08;Common Neighbors, Jaccard, Adamic-Adar…