數組題解——移除元素?【LeetCode】

27. 移除元素

快慢指針法

算法思路

  • 使用雙指針(fastslow)遍歷數組。
    • fast指針遍歷每一個元素。
    • slow指針指向下一個將被保留的位置。
  • 如果nums[fast] != val,就把nums[fast]賦值到nums[slow],并將slow向前移動一位。
  • 遍歷結束后,slow的值就是新數組的長度,數組前slow個元素即為移除指定元素后的結果。

注意

  • 題目要求原地操作,不能使用額外數組。
  • 不關心原數組后面剩余的元素。
#快慢雙指針法
class Solution:def removeElement(self, nums: List[int], val: int) -> int:fast = slow = 0size = len(nums)while fast < size:if nums[fast] != val:nums[slow] = nums[fast]slow += 1fast += 1return slow

時間復雜度

  • O(n),n為數組長度。每個元素最多被訪問兩次(一次被fast讀,一次被slow寫)。

空間復雜度

  • O(1),只用了常數級別的額外空間。

暴力法

算法思路

  • 用變量i遍歷數組,l記錄當前數組有效長度。
  • 每當nums[i] == val,就從i+1l-1的所有元素整體向前移動一位(覆蓋掉nums[i])。
  • 有效長度l減1,i回退1(這樣下一輪循環會檢查移過來的新元素)。
  • 遍歷直到i == l
#(版本二)暴力法
class Solution:def removeElement(self, nums: List[int], val: int) -> int:i, l = 0, len(nums)while i < l:if nums[i] == val: # 找到等于目標值的節點for j in range(i+1, l): # 移除該元素,并將后面元素向前平移nums[j - 1] = nums[j]l -= 1i -= 1i += 1return l

時間復雜度

  • 最壞情況下:每遇到一個等于val的元素,就要把后面所有元素向前平移一次。
  • 假設數組長度為n,且所有元素都等于val,每次移動n-1, n-2, ..., 1次,總操作次數為O(n^2)
  • 所以時間復雜度為O(n^2)

空間復雜度

  • 沒有申請額外數組,只用了常數個變量。
  • 空間復雜度為O(1)

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

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

相關文章

ubuntu20.04安裝多版本python時,如何使用sudo python3.10

sudo 命令只會加載基本的path和動態庫&#xff0c;自己定義的不會加入&#xff0c;因此會出現使用sudo運行多版本python出現奇怪的現象&#xff0c;進行如下操作就可以使用 sudo vi ~/.bashrc alias sudosudo env PATH$PATH LD_LIBRARY_PATH$LD_LIBRARY_PATH 使用 sudo visud…

統計學純基礎(1)

?統計分析分為統計描述與統計推斷&#xff0c;統計推斷分為總體估計與假設檢驗 &#x1f3c2;16&#xff1a;45 醫學研究--基礎研究、轉化醫學研究、臨床研究 臨床研究--病因學研究、診斷準確性試驗、預后研究、療效研究 一般認為3個月以內的預后屬于近期預后&#xff0c;…

接口自動化測試之pytest 運行方式及前置后置封裝

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 一、Pytest 優點認知 1.可以結合所有的自動化測試工具 2.跳過失敗用例以及失敗重跑 3.結合allure生產美觀報告 4.和Jenkins持續集成 5.很多強大的插件 pytest-htm…

利用folium實現全國高校分布地圖顯示

智匯中國 | 揭秘!一張地圖帶你遨游全國高校殿堂 大家好,這期我們來利用folium模塊實現全國高校分布的地圖顯示。 什么是Folium Folium為Python用戶提供了便捷的方式來利用Leaflet.js的強大地圖可視化功能,而無需直接編寫JavaScript代碼。它允許開發者以Pythonic的方式處理…

【和春筍一起學C++】(二十二)C++函數新特性——函數重載

目錄 函數重載的含義 重載函數使用注意事項 幾種特殊情況 函數重載的含義 函數重載使得能夠用不同的參數列表調用多個同名的函數。可以通過函數重載設計一系列函數,它們完成相同的工作,但使用不同的參數列表。 函數重載的關鍵是函數的參數列表——也被稱為函數特征標。如…

CrewAI多智能體框架的實操教程-旅行規劃-2

1、創建一個新的 CrewAI 項目 surprise_trip crewai create crew surprise_trip 選擇模型廠商和模型 生成.env MODELgpt-4o OPENAI_API_KEY你的api_keySERPER_API_KEY你的SERPER api_key 2、探索項目結構 3、配置代理 修改 agents.yaml文件。 # 個性化活動規劃師 Agent p…

vue腳手架與前后端交互

前言 。Vue.js作為一種流行的前端框架&#xff0c;提供了豐富的功能和靈活的架構&#xff0c;方便了開發者進行高效的開發。為了更好地使用Vue&#xff0c;Vue CLI&#xff08;腳手架工具&#xff09;成為了開發者進行項目創建和管理的重要工具。本文將結合Vue腳手架的使用場景…

【麻省理工】《how to speaking》筆記

【【麻省理工】《如何說話》一節課教你成為表達的王者】 開始 在演講最開始的時候&#xff0c;你要告訴觀眾&#xff0c;在接下來的15分鐘或一個小時之內&#xff0c;他們將會學到什么東西。這會讓觀眾集中注意力去傾聽。 PPT 你的幻燈片上的字要越少越好。因為聽眾的大腦一…

ESP32-HTML-08

一、html顯示圖片 1.工程包含Html需要顯示的圖片 2、CMakeLists.txt包含圖片資源 舉例&#xff1a; idf_component_register(SRCS main.cEMBED_FILES root.html favicon.ico) 3.html中圖片的標簽 <img src"motus.ico"> 4.后臺代碼的添加 static esp_e…

前端后端文件下載防抖實現方案

在 Vue 3 中實現下載文件防抖&#xff0c;可以通過封裝一個防抖函數來控制下載請求的觸發頻率。以下是完整的實現方案&#xff1a; 1. 封裝防抖工具函數 javascript 復制 下載 // utils/debounce.js export function debounce(func, delay) {let timer null;return funct…

【Linux網絡與網絡編程】15.DNS與ICMP協議

1. DNS 1.1 DNS介紹 TCP/IP 中使用 IP 地址和端口號來確定網絡上的一臺主機的一個程序&#xff0c;但是 IP 地址不方便記憶&#xff0c;于是人們發明了一種叫主機名的字符串&#xff0c;并使用 hosts 文件來描述主機名和 IP 地址的關系。最初, 通過互連網信息中心(SRI-NIC)來…

Python打卡:Day35

復習日 浙大疏錦行

GoAdmin代碼生成器實踐

文章目錄 前言創建SQL表格使用在線生成工具應用自動生成的代碼數據變更時附加新的邏輯總結 前言 開源項目 go-admin&#xff0c;我一直用的是這個地址 https://github.com/GoAdminGroup/go-admin&#xff0c;不過最近發現了一個 Gin Vue 版本的 go-admin&#xff0c;對我解決…

web布局13

在 CSS 中有很多種類型的函數&#xff0c;其中可用于尺寸屬性的函數主要有 calc() 、min() 、max() 、clamp() 等。這些 CSS 函數都可用來設置網格軌道尺寸&#xff0c;除此之外&#xff0c;還有一些專門用于設置網格軌道的函數&#xff0c;比如 repeat() 、minmax() 和 fit-co…

pdf轉圖片(png,jpg)的python腳本

pdf轉圖片&#xff08;png&#xff0c;jpg&#xff09;的python腳本 PDF轉圖片工具 1.安裝庫 pip install pymupdf 2.如果需要pdf轉jpg的更改DEFAULT_FORMAT即可 3.一定注意要將腳本與待轉化的.pdf文件放在同一個目錄 4.運行腳本&#xff0c;將腳本所在目錄所有.pdf文件轉…

大模型本地部署,擁有屬于自己的ChatGpt

ChatGpt 以其強大的信息整合和對話能力驚艷了全球,在自然語言處理上面表現出了驚人的能力。不管用于文案撰寫還是程序輔助開發都大大提高了我們的工作效率,但是其使用有一定的門檻,讓我們大多數人都望而卻步,今天我們利用ollama實現本地大模型的步驟,讓我們輕松擁有自己的…

【mcu】-老舊小區門禁電話改造指南

老舊小區門禁電話改造指南(四線制DIY方案) 一、明確四根線的功能(關鍵第一步) 通常四線制門禁電話的線纜定義如下(需用萬用表驗證): 線色 常見功能 電壓/信號類型 檢測方法 紅線 電源正極(+12V) DC 12V(待機) 萬用表直流檔測對黑線電壓 黑線 電源負極(GND) 0V 與…

word中如何快速打出上標?

在 Microsoft Word 中快速輸入上標的方法有以下幾種&#xff0c;推薦掌握 鍵盤快捷鍵法&#xff08;最常用高效&#xff09;&#xff1a; ? 方法一&#xff1a;快捷鍵法&#xff08;強烈推薦&#xff0c;效率最高&#xff01;&#xff09; 輸入需要上標的文字/數字&#xff0…

如何優化HarmonyOS 5的分布式通信性能?

以下是針對HarmonyOS 5分布式通信性能優化的系統性方案&#xff0c;結合核心技術特性與實踐經驗&#xff1a; 一、傳輸層優化 數據壓縮與批處理 // 啟用ZLIB壓縮&#xff08;>1KB自動壓縮&#xff09; DistributedConfig config new DistributedConfig.Builder().setCom…

Matplotlib圖像處理三劍客:imshow(), imread(), imsave()

Matplotlib是Python中最著名的數據可視化庫之一&#xff0c;它不僅能夠繪制各種統計圖表&#xff0c;還提供了強大的圖像處理功能。本文將重點介紹Matplotlib中三個核心的圖像處理方法&#xff1a;imshow()、imread()和imsave()&#xff0c;通過示例代碼展示它們的使用方法。 …