LC打怪錄 283. moving zero

題目鏈接?力扣

class Solution:def moveZeroes(self, nums: List[int]) -> None:l=0for r in range(len(nums)):if nums[r]:nums[l], nums[r] = nums[r], nums[l]l += 1return nums

方法一:

思路

雙指針

1. def moveZeroes(self, nums: List[int]) -> None: 定義了一個名為moveZeroes的方法,該方法接受一個名為nums的整數列表作為參數。該方法的返回類型被指定為None,意味著這個方法不會返回任何值,而是直接在輸入的nums列表上進行修改。

2. l=0 初始化一個名為l的變量,作為左指針(或“慢”指針),用于跟蹤最近的非零元素應該被放置的位置。for r in range(len(nums)): 使用一個名為r的變量(右指針或“快”指針)遍歷nums列表的所有索引。

3. if nums[r]: 檢查當前r指向的元素是否非零。如果是非零元素,執行以下操作:

a. nums[l], nums[r] = nums[r], nums[l] 交換lr指向的元素。這實際上將非零元素移動到數組的前面,同時保持它們原有的相對順序。

b. l += 1l(左指針)向右移動一位,因為我們剛剛在l的位置放置了一個非零元素,所以下一個可能的非零元素的位置應該是l + 1

4. return nums 雖然方法的返回類型被指定為None,但這里返回了修改后的nums列表。這不是必須的,因為nums列表是在原地被修改的,但這樣做可以在測試或調試時方便查看方法的效果。

時間復雜度為:O(n)

方法2:

Bubble Sort

那怎么知道有序呢?其實很簡單,就是第二層 for 循環的時候,沒有交換的元素。

所以呢,這里就增加一個 flag 數組,如果第二層循環沒有交換元素的時候,證明數組已經排序好了,不需要再繼續遍歷,直接返回就好了。


def bubbleSort(nums):# 數組長度n = len(nums)# 遍歷數組中的元素(n 次冒泡操作)for i in range(n):# 標志位,檢查是否發生元素交換flag = False# 每次冒泡操作中比較每個元素for j in range(n - i - 1):# 比較相鄰元素大小(升序)if nums[j] > nums[j + 1]:# 如果左邊大于右邊,就交換順序nums[j], nums[j + 1] = nums[j + 1], nums[j]# 如果發生交換,證明還不是有序,繼續遍歷flag = True# 如果不發生交換,證明數組已經有序,直接跳出循環        if not flag:break# 返回數組            return nums

實現邏輯

  • 新代碼通過比較相鄰元素并在發現0時將其向后交換,逐步將0移動到數組的末端。這個過程在每一輪循環中都會重復,直到所有的0都被移動到末尾。
  • 之前的方法通過使用兩個指針(一個快指針和一個慢指針)來避免不必要的比較和交換。當快指針指向的元素非0時,它會與慢指針指向的元素交換位置,然后慢指針前進一位。這樣可以保證所有非0元素都被移動到數組的前面,而0則自然被留在了后面。

時間復雜度:O(n2)

  • 新代碼的時間復雜度是O(n2),這是因為它使用了兩層嵌套循環來遍歷數組。對于每一個元素,它都會與其后面的元素進行比較并可能交換,這導致了較高的運算次數,特別是當數組較大時。?

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

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

相關文章

Stable Diffusion 3正式發布,旨在鞏固其在AI圖像領域相對于Sora和Gemini的領先地位

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

vue3 + vite 項目可以使用純Js開發嗎?

答案:可以 創建項目: 按照鏈接參考或者按官方: webstorm 創建vue3 vite 項目-CSDN博客 項目目錄 tsconfig.json 配置允許js allowJs指定是否編譯js文件,在任意文件當中,如果我們模塊使用js寫的,那么我們需要 將all…

地理空間分析15——Python在應急響應與地理空間分析中的創新應用

目錄 寫在開頭1.Python及其在地理空間分析中的應用地理空間數據處理庫地理空間數據可視化工具 2.應急響應中的Python應用實例2.1 災害風險評估2.2 實時數據分析與響應2.3資源優化分配 3 地震應急響應案例:利用Python進行數據分析3.1 背景介紹3.2 數據收集與處理3.3 …

鏈式插補 (MICE):彌合不完整數據分析的差距

導 讀 數據缺失可能會扭曲結果,降低統計功效,并且在某些情況下,導致估計有偏差,從而破壞從數據中得出的結論的可靠性。 處理缺失數據的傳統方法(例如剔除或均值插補)通常會引入自己的偏差或無法充分利用數…

機器學習:模型選擇和模型優化

進行數據處理之后,我們得到了x_train和y_train,我們就可以用來進行回歸或分類模型訓練啦~ 一、模型選擇 我們這里可能使用的是回歸模型(Regression),值得注意的是,回歸和分類不分家。分類是預測離散值&…

策略的更新、加載與同步

C語言的C庫提供了策略的更新、加載與同步的方法,這里引入多線程,達到區分讀寫任務(生產者——消費者 模型)的目的。 示例: /*brief check strategy to update, reload, synchronized to read(stoped by SIGINT)author…

Mysql標量子查詢

目錄 子查詢標量子查詢數據準備 子查詢 SQL語句中嵌套select語句,稱為嵌套查詢,又稱子查詢。 SELECT * FROM t1 WHERE column1 ( SELECT column1 FROM t2 ... );子查詢外部的語句可以是insert / update / delete / select 的任何一個&…

git的安裝、使用

文章目錄 安裝gitgit學習網站git初始配置具體配置信息 新建版本庫(倉庫)git的工作區域和文件狀態工作區域文件狀態git文件提交的基礎指令 git基礎指令1. 版本提交2. 分支創建3. 分支切換4. 分支合并(1) git merge(2) git rebase 5. 在git的提交樹上移動(…

Ps:銳化工具

銳化工具 Sharpen Tool可用于增強圖像局部區域的對比度,從而提高圖像的清晰度和細節,特別適用于提升照片的邊緣定義和紋理細節。 快捷鍵:無 ◆ ◆ ◆ 常用操作方法與技巧 1、如果直接在像素圖像上使用銳化工具,可嘗試使用“漸隱…

怎么優雅地訪問ChatGPT

ChatGPT,這顆璀璨的智能結晶,在2022年歲末之際,由OpenAI實驗室傾力鑄就,猶如夜空中躍動的智慧星辰,點亮了人工智能領域的新紀元。猶如汪洋中的一座燈塔,ChatGPT以其獨特的智慧光輝引人注目,然而…

Linux:kubernetes(k8s)node節點加入master主節點(3)

Linux:kubernetes(k8s)搭建mater節點(kubeadm,kubectl,kubelet)-CSDN博客https://blog.csdn.net/w14768855/article/details/136415575?spm1001.2014.3001.5502 我在上一章部署好了主節點&…

前端打包部署(黑馬學習筆記)

我們的前端工程開發好了,但是我們需要發布,那么如何發布呢?主要分為2步: 1.前端工程打包 2.通過nginx服務器發布前端工程 前端工程打包 接下來我們先來對前端工程進行打包 我們直接通過VS Code的NPM腳本中提供的build按鈕來完…

從下一代車規MCU厘清存儲器的發展(2)

目錄 1.概述 2.MCU大廠的選擇 2.1 瑞薩自研STT-MRAM 2.2 ST專注PCM 2.3 英飛凌和臺積電聯手RRAM 2.4 NXP如何計劃eNVM 3.小結 1.概述 上篇文章,我們簡述了當前主流的存儲器技術,現在我們來講講各大MCU大廠的技術選擇 2.MCU大廠的選擇 瑞薩日…

redis的RDB和AOF

Redis是一種高性能的鍵值對存儲系統,它支持多種類型的數據結構,如字符串、列表、集合、哈希表、有序集合等。Redis提供了兩種不同的持久化機制來確保數據的安全性:RDB(Redis Database)和AOF(Append Only Fi…

Tomcat布署及優化二-----Mysql和虛擬機

1.Mysql搭Blog 1.1下載安裝包 看一下tomcat狀態 1.2放到指定目錄 cp jpress-v3.2.1.war /usr/local/tomcat/webapps/ cd /usr/local/tomcat/webapps/ 1.3路徑優化 ln -s jpress-v3.2.1 jpress 看jpress權限 1.4生成配置文件 cat >/etc/yum.repos.d/mysql.repo <<E…

掘根寶典之C語言指針詳解

目錄 什么是指針&#xff1f; 與指針相關的運算符 指針類型的意義 指針的大小 初始化 將指針直接指向一個已經存在的變量或內存地址&#xff1a; 使用malloc函數動態分配內存&#xff0c;并將指針指向新分配的內存&#xff1a; 使用calloc函數動態分配內存&#xff0c;并…

Javascript:常量與數據類型

一、前言 介紹完變量之后我們來對常量進行了解一番&#xff0c;關于常量我們需要知道些什么呢&#xff1f; 二、正文 1.常量的基本使用 使用const聲明的變量稱為常量&#xff0c;當某個變量的字面量無需改動的時候就能夠用到常量。 //聲明一個常量 const G 9.8 //輸出這個常量…

您的計算機已被pings勒索病毒感染?恢復您的數據的方法在這里!

導言&#xff1a; 在數字時代&#xff0c;數據是企業和個人生活中不可或缺的一部分。然而&#xff0c;隨著勒索病毒的不斷進化和傳播&#xff0c;我們的數據面臨著前所未有的威脅。其中&#xff0c;.pings 勒索病毒是最新一輪威脅之一&#xff0c;它以其獨特的加密算法和無情的…

leetcode-字符串中的單詞數

434. 字符串中的單詞數 題解&#xff1a; 這個問題可以通過遍歷字符串&#xff0c;當遇到非空格字符時&#xff0c;判斷其前一個字符是否為空格&#xff0c;如果是&#xff0c;則說明這是一個新的單詞的開始&#xff0c;計數器加一。最后返回計數器的值即可。 class Solutio…

【Redis | 第一篇】快速了解Redis

文章目錄 1.快速了解Redis1.1簡介1.2與其他key-value存儲的不同處1.3Redis安裝——Windows環境1.3.1下載redis1.3.2啟動redis1.3.3進入redis客戶端1.3.4修改配置 1.4Redis安裝——Linux環境1.4.1安裝命令1.4.2啟動redis1.4.3進入redis客戶端 1.5配置修改1.6小結 1.快速了解Redi…