【LeetCode_283】移動零

刷爆LeetCode系列

  • LeetCode第283題:
  • github地址
  • 前言
  • 題目描述
  • 題目與思路分析
  • 代碼實現
  • 算法代碼優化

LeetCode第283題:

github地址

有夢想的電信狗

前言

本文用C++實現 LeetCode 第283題


題目描述

題目鏈接:https://leetcode.cn/problems/move-zeroes/description/

在這里插入圖片描述

在這里插入圖片描述


題目與思路分析

目標分析

  1. 將數組中所有的0移動到數組的末尾,同時保持非零元素的相對位置
  2. 不復制數組,即原地移除,意味著時間復雜度為O(n),空間復雜度為O(1)
  3. 直接對原數組進行操作

思路:雙指針

  • cur:用于掃描元素,從待掃描元素的第一個開始,因此初始下標為0
  • dest:指向數組中,已處理的區間中,最后一個非零元素的下標,初始時還未處理,**初始下標為-**1

操作

  • cur < nums.size()時,進入循環判斷

  • nums[cur] == 0 時:當前位置為0,cur++,略過該位置的元素0,dest不變

  • nums[cur] != 0 時: 由于dest已處理的區間中,最后一個非零元素的下標,因此dest++后指向下一個位置,再將非零元素nums[cur]nums[dest] 交換,再cur++

    • 即遇到非零元素:
      • ++dest
      • std::swap(nums[cur], nums[dest]);
      • ++cur

在這里插入圖片描述

代碼實現

  • 時間復雜度O(n)
  • 空間復雜度O(1)
class Solution {
public:void moveZeroes(vector<int>& nums) {int cur = 0, dest = -1;while(cur < nums.size()){if(nums[cur] == 0){++cur;}else{++dest;std::swap(nums[cur], nums[dest]);++cur;}}}
};

算法代碼優化

  • 利用前置和后置++的特性最終優化,但不推薦這么寫,因為算法的可讀性下降了
class Solution {
public:void moveZeroes(vector<int>& nums) {int cur = 0, dest = -1;while(cur < nums.size()){if(nums[cur] == 0)++cur;elsestd::swap(nums[cur++], nums[++dest]);}}
};

以上就是本文的所有內容了,如果覺得文章對你有幫助,歡迎 點贊?收藏 支持!如有疑問或建議,請在評論區留言交流,我們一起進步

分享到此結束啦
一鍵三連,好運連連!

你的每一次互動,都是對作者最大的鼓勵!


征程尚未結束,讓我們在廣闊的世界里繼續前行! 🚀

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

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

相關文章

一文弄懂C/C++不定參數底層原理

目錄 一、C語言的可變參數&#xff1a;基于棧幀的手動讀取 &#xff08;1&#xff09;C函數調用的棧幀結構 &#xff08;2&#xff09;C 可變參數的 4 個核心宏&#xff1a;如何 “手動讀棧” &#xff08;3&#xff09;實戰代碼&#xff1a;用 C 可變參數實現求和函數 &a…

【Android】【設計模式】抽象工廠模式改造彈窗組件必知必會

寫一個 Android 版本的抽象工廠彈窗 Manager 管理器&#xff0c;使用 DialogFragment 實現&#xff0c;這樣能更貼近真實的開發場景。結構設計 抽象產品&#xff1a;BaseDialogFragment&#xff08;繼承 DialogFragment&#xff09;具體產品&#xff1a;LoginDialogFragment, …

Win64OpenSSL-3_5_2.exe【安裝步驟】

官網下載 注意&#xff1a;科學上網&#xff0c;可以加速下載速度&#xff01; Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 下載后得到&#xff1a;Win64OpenSSL-3_5_2.exe 雙擊安裝 修改安裝路徑&#xff1a; 默認就選擇第一個。 重要提醒?…

華為云云原生架構賦能:大騰智能加速業務創新步伐

巨大的渦輪、細小的螺絲&#xff0c;一臺航天飛機發動機的三維模型呈現在屏幕上&#xff0c;遠程同事同步協作&#xff0c;一臺復雜設備在工程師高效的協同中不斷完善。深圳市大騰信息技術有限公司&#xff0c;正是這場工業變革的推動者之一。大騰智能以“云原生工業”的融合為…

基于https+域名的Frp內網穿透教程(Linux+Nginx反向代理)

系列文章目錄 基于http公網ip的Frp內網穿透教程(win server) 基于http域名的Frp內網穿透教程(win serverIIS反向代理) 基于http公網ip的Frp內網穿透教程(Linux) 基于https域名的Frp內網穿透教程(LinuxNginx反向代理) 目錄 系列文章目錄 前言 一、Frp是什么&#xff1f; 1. …

裸機程序(1)

一、裸機裸機是一個在計算機硬件與軟件開發領域高頻出現的概念&#xff0c;核心定義是 “未安裝操作系統&#xff08;OS&#xff09;&#xff0c;僅包含硬件本身&#xff08;或僅運行最底層硬件驅動 / 控制程序&#xff09;的設備”。在電腦中&#xff0c;裸機會映射代碼到cpu&…

95%企業AI失敗?揭秘LangGraph+OceanBase融合數據層如何破局!?

本文較長&#xff0c;建議點贊收藏&#xff0c;以免遺失。更多AI大模型應用開發學習視頻及資料&#xff0c;盡在聚客AI學院。不知道你們有沒有遇到過&#xff0c;在我們一些實際落地的AI項目中&#xff0c;雖然前期“Demo 很驚艷&#xff0c;但上線后卻無人問津”。你們有沒有想…

樹莓集團產教融合:數字學院踐行職業教育“實體化運營”要求

在職業教育改革不斷深化的背景下&#xff0c;“實體化運營” 成為推動職業教育高質量發展的重要方向。樹莓集團積極響應這一要求&#xff0c;以產教融合為核心&#xff0c;打造數字學院&#xff0c;切實踐行職業教育 “實體化運營”&#xff0c;為培養高素質數字領域專業人才探…

ELK 統一日志分析系統部署與實踐指南(上)

#作者&#xff1a;張桐瑞 文章目錄1 ELK 技術棧概述1.1ELK 核心組件詳解1.2 ELK 工作流程2 ELK部署2.1 環境描述2.1.7 配置es集群下篇&#xff1a;《ELK 統一日志分析系統部署與實踐指南&#xff08;下&#xff09;》 鏈接: [https://blog.csdn.net/qq_40477248/article/detail…

上位機知識篇---poweshellcmd

要理解 PowerShell 和 CMD 的區別&#xff0c;我們可以先打個通俗的比方&#xff1a;CMD 像老式功能機&#xff0c;只能干打電話、發短信這些 “基礎活”&#xff1b;而 PowerShell 像智能手機&#xff0c;不僅能做基礎操作&#xff0c;還能裝 APP、玩復雜功能&#xff0c;甚至…

利用 Python 繪制環形熱力圖

暑假伊始&#xff0c;Coldrain 參加了學校舉辦的數模集訓&#xff0c;集訓的過程中&#xff0c;遇到了需要展示 59 個特征與 15 個指標之間的相關性的情況&#xff0c;在常用的圖表不大合適的情況下&#xff0c;學到了一些厲害的圖表&#xff0c;但是似乎千篇一律都是用 R 語言…

【序列晉升】27 Spring Cloud Sleuth給分布式系統裝上透視鏡

Spring Cloud Sleuth作為微服務架構中的核心監控組件&#xff0c;通過輕量級的無侵入式跟蹤機制&#xff0c;解決了分布式系統中請求路徑復雜、問題定位困難的痛點。它自動為每個服務請求創建唯一的Trace ID&#xff0c;并為每個服務間調用生成Span ID&#xff0c;形成完整的調…

Linux(2)|入門的開始:Linux基本指令(2)

一、基本指令介紹 回顧上篇博客Linux(1)|入門的開始&#xff1a;Linux基本指令-CSDN博客&#xff0c;我們已經學習了mkdir目錄的創建&#xff0c;touch普通文件的創建&#xff0c;光有創建肯定是不行的&#xff0c;接下來就介紹我們的刪除指令 1、rmdir指令&&rm指令 …

sv中forever如何結束

在 SystemVerilog 中&#xff0c;forever 循環本身無法自我結束。它的設計初衷就是創建一個永不終止的循環。 因此&#xff0c;要結束一個 forever 循環&#xff0c;必須從外部強制中斷它。主要有以下兩種方法&#xff1a;1. 使用 disable 語句&#xff08;最常用和推薦的方法&…

關于熵減 - 從法拉第圓盤到SEG

我們清楚的知道法拉第圓盤發電機的原理。當導線切割磁感線的時候&#xff0c;會產生電流&#xff0c;當然電流產生需要的是電動勢&#xff0c;也就是&#xff0c;這里寫 不寫 &#xff0c;避免和電場強度混淆。根據上面的分析&#xff0c;我們知道磁場強度特斯拉 的單位&#x…

【機器學習】實戰:市場增長點分析挖掘項目

在電商行業激烈競爭的背景下&#xff0c;精準挖掘市場增長點是企業保持競爭力的關鍵。本文基于拜耳官方旗艦店驅蟲劑市場分析項目&#xff0c;先對原文核心內容進行梳理與解讀&#xff0c;再續寫關鍵的競爭分析模塊&#xff0c;形成完整的市場增長點挖掘閉環&#xff0c;為企業…

【Day 18】21.合并兩個有序鏈表 2.兩數相加

文章目錄21.合并兩個有序鏈表題目&#xff1a;思路&#xff1a;迭代代碼實現&#xff08;Go&#xff09;&#xff1a;2.兩數相加題目&#xff1a;思路&#xff1a;代碼實現&#xff08;Go&#xff09;&#xff1a;21.合并兩個有序鏈表 題目&#xff1a; 將兩個升序鏈表合并為…

Vue 3 WebSocket通信方案:從原理到實踐

Vue 3 WebSocket通信方案&#xff1a;從原理到實踐 在現代Web應用開發中&#xff0c;實時通信已成為許多應用的核心需求。從即時聊天到實時數據更新&#xff0c;用戶對應用響應速度的期望越來越高。本文將深入剖析一個Vue 3環境下的WebSocket通信方案&#xff0c;包括基礎封裝與…

Windows 電源管理和 Shutdown 命令詳解

一、Windows 電源管理概述 Windows 操作系統通過其內置的電源管理框架&#xff0c;為用戶提供了多種電源狀態和配置選項&#xff0c;以在性能、能耗和數據安全之間找到最佳平衡點。以下是 Windows 系統中常見的電源狀態及其特點&#xff1a; 1. 睡眠&#xff08;Sleep&#xff…

Selenium WebUI 自動化“避坑”指南——從常用 API 到 10 大高頻問題

目錄 一、為什么 90% 的 UI 自動化腳本活不過 3 個月&#xff1f; 二、Selenium必會 API 速查 三、實踐 四、10 大高頻異常“癥狀 → 病因 → 處方” 五、可復用的工具函數 六、面試高頻追問&#xff08;附標準答案&#xff09; 一、為什么 90% 的 UI 自動化腳本活不過 …