LeetCode算法日記 - Day 1: 移動零、復寫零

目錄

1. 移動零

1.1?思路解析

1.2?代碼實現

2. 復寫零

2.1 思路解析

2.2?代碼實現


1. 移動零

283. 移動零 - 力扣(LeetCode)

給定一個數組?nums,編寫一個函數將所有?0?移動到數組的末尾,同時保持非零元素的相對順序。

請注意?,必須在不復制數組的情況下原地對數組進行操作。

示例 1:

輸入: nums = [0,1,0,3,12]輸出: [1,3,12,0,0]

示例 2:

輸入: nums = [0]輸出: [0]

我們可以用雙指針來解決上方問題,這里的雙指針用數組下標代替與C++的指針作區分。此問題不涉及整個數組的平移。

1.1?思路解析

a)先定義兩個指針,dest 和 cur,我們可以讓 cur 來遍歷整個數組。

b)我們可以用雙指針來把整個數組分為三個區域:[0,dest] 非零區域、[dest+1,cur-1] 零區域、[cur,n-1] 待處理區域。上述問題我在之后將統一稱為數組劃分問題。

c)具體的思路是,讓 cur 從零開始,dest 從 -1位置開始。當 cur 遇到零元素時跳過 cur++,當 cur 遇到非零元素時 dest++ ,并且讓當前 cur 所指元素和 dest++ 后的所指元素交換位置。

1.2?代碼實現

class Solution {public void moveZeroes(int[] nums) {for(int cur = 0,dest = -1; cur<nums.length;cur++){if(nums[cur] != 0){int tmp = nums[cur];dest++;nums[cur] = nums[dest];nums[dest] = tmp;}}}
}

2. 復寫零

1089. 復寫零 - 力扣(LeetCode)

2.1 思路解析

a)我們可以定義雙指針來解決該問題,定義 cur 和 dest。

b)cur 遇到的情況分為兩種,遇到零 和 非零元素。

c)我們可以讓 cur 遇到非零元素時,dest 在當前位置復寫一個;同理 cur 遇到零元素時,dest 在當前位置和后一位復寫兩個零。

但是如果我們從左往右來進行操作,如果遇到 [1,0,2,1] 這種數組的話,操作結果就不符合題目要求,因為 dest 已經在 cur 前面了,會造成數據丟失。如下圖所示:

所以我們需要轉變思路:

a)先找到最后一個復寫的數

先定義兩個指針 cur 和 dest,讓 cur 的初始值為0,dest 初始值為 -1。讓 dest 走 cur 遍歷的數來判斷最后一個復寫的數。當 cur 遇到非零元素時,dest 移動一位,cur 遇到零元素時,dest 移動兩位。當 dest 遍歷完整個數組時,cur 所指的下標就是最后一個復寫的數。

b)處理邊界問題

當我們遇到類似 [2,0,3,5,0,4] 這樣的數組時就會發生 dest 所在的位置越界情況,從后向前的復寫操作就會報錯,解決方案就是 arr[dest-1] = 0; cur --;dest -= 2。越界情況如下圖所示:

c)從后向前完成復寫操作

當 cur 遇到非零元素時,把 cur 的元素覆蓋到 dest 所在的位置,arr[dest--] = arr[cur--];當 cur 遇到零元素時,把零元素覆蓋到 dest 當前位置和前一位。

2.2?代碼實現
class Solution {public void duplicateZeros(int[] arr) {int cur = 0, dest = -1;while(cur<arr.length){if(arr[cur] == 0){dest += 2;}else{dest ++;}if(dest>=arr.length-1){break;}cur++; }if(dest == arr.length){arr[dest-1] = 0;dest -= 2;cur --;}while(cur>=0){if(arr[cur] == 0){arr[dest--] = 0;arr[dest--] = 0;cur--;}else{arr[dest--] = arr[cur--];}}}
}

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

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

相關文章

Odoo:免費開源的醫療器械行業解決方案

開源智造Odoo專家團隊深知&#xff0c;作為醫療器械制造商&#xff0c;您的成功取決于制造卓越產品的能力。您必須遵循嚴密控制的流程&#xff0c;開發和制造出達到最嚴格質量標準的產品。“開源智造Odoo醫療器械行業解決方案”是為醫療器械制造商設計的全球企業資源規劃(ERP)軟…

Redis鍵值對中值的數據結構

前言 前面我們已經介紹了Redis的鍵值對存儲管理的底層數據結構。如果不清楚的同志可以看我前面的博客 Redis數據庫存儲鍵值對的底層原理-CSDN博客 下面,我們來看一下Redis鍵值對中值的數據結構有那些叭 Redis常見的5種數據類型 string …

MySQL自動化安裝工具-mysqldeploy

功能 可在linux系統上安裝 mysql5.5/5.6/5.7/8.0/8.4 版本的 MySQL&#xff0c;可以初始化多實例 MySQL。 碼云: https://gitee.com/hh688/mysqldeploy guithub: https://github.com/hhkens/mysqldeploy 限制 僅在 centos7 環境進行測試&#xff0c;后期可能支持更多系統。 此程…

簡要探討大型語言模型(LLMs)的發展歷史

關注大型語言模型(LLMs) 簡要探討語言模型的發展歷史 理解Transformer架構的基本元素和注意力機制 了解不同類型的微調方法 語言模型的大小之分 在語言模型領域,“小”和“大”是相對概念。幾年前還被視為“巨大”的模型,如今已被認為相當小。該領域發展迅猛,從參數規模為…

Java試題-選擇題(2)

Java試題-選擇題(2) 題目 下列語句創建對象的總個數是: String s=“a”+“b”+"c”+“d”+"e” A.4 B.2 C.3 D.1 關于下面的程序段的說法正確的是()? File file1=new File(“e:\xxx\yyy\zzz");file1.mkdir(); A.如目錄e:\xxx\yyy\不存在,程序會拋出FileN…

揭秘動態測試:軟件質量的實戰防線

動態測試概述&#xff08;擴展版&#xff09; 目錄 動態測試概述&#xff08;擴展版&#xff09; 一、動態測試的定義與重要性 ? 二、動態測試類型 &#x1f50d; &#xff08;一&#xff09;功能測試 &#x1f9e9; &#xff08;二&#xff09;非功能測試 &#x1f4ca…

機器學習①【機器學習的定義以及核心思想、數據集:機器學習的“燃料”(組成和獲取)】

文章目錄先言一、什么是機器學習1.機器學習的定義以及核心思想2.機器學習的四大類型2.1監督學習&#xff08;Supervised Learning&#xff09;2.2半監督學習&#xff08;Midsupervised Learning&#xff09;2.3無監督學習&#xff08;Unsupervised Learning&#xff09;2.4強化…

GaussDB 數據庫架構師(十二) 資源規劃

1 硬件和軟件要求 1&#xff09;硬件配置示例 硬件配置示例設備類型 設備型號 數量 備注 計算節點 CPU&#xff1a; 2*64 Cores&#xff0c;Kunpeng 920 內存&#xff1a;32*32GB 系統盤&#xff1a;2*960GB SATA SSD 數據盤&#xff1a;24*960GB SATA SSD RAID卡&#x…

Linux系統文件與目錄內容檢索(Day.2)

一、文件和目錄內容檢索處理命令1、uniq去重語法uniq [options] [input_file [output_file]]選項選項作用-c進行計數&#xff0c;并刪除文件中重復出現的行-d僅顯示連續的重復行-u僅顯示出現一次的行-i忽略大小寫案例1、刪除輸入文件中的重復行sort input.txt | uniq2、僅顯示重…

如何選擇一個容易被搜索引擎發現的域名?

在這個數字化時代&#xff0c;域名不僅是企業線上身份的標識&#xff0c;更是影響網站搜索曝光率的關鍵因素。一個精心挑選的域名能為品牌帶來更多自然流量&#xff0c;下面我們就來探討幾個實用技巧。一、簡潔易記是王道好域名首先要讓人過目不忘。想象一下&#xff0c;當用戶…

樹形DP進階:結合dfn序的線性化樹問題求解技巧

樹形DP進階&#xff1a;結合dfn序的線性化樹問題求解技巧一、dfn序與樹的線性化1.1 dfn序的基本概念1.2 樹形DP結合dfn序的優勢二、核心應用&#xff1a;子樹區間的DP優化2.1 子樹權值和的快速查詢與更新問題描述結合dfn序的解法代碼實現&#xff08;前綴和版本&#xff09;優化…

九、Maven入門學習記錄

Maven介紹Maven作用統一項目結構Maven安裝&#xff08;注意配置阿里云私服時url要跟換成最新的&#xff09;IDEA創建Meavn項目Maven坐標介紹IDEA導入Maven項目依賴配置依賴傳遞依賴傳遞-排除依賴依賴范圍生命周期生命周期-執行特定生命周期生命周期-總結

中標喜訊 | 安暢檢測再下一城!斬獲重慶供水調度測試項目

安暢檢測在第三方檢測領域持續深耕&#xff0c;再傳捷報&#xff01;公司于2025年7月30日正式收到中標通知&#xff0c;成功拿下重慶水資源產業股份有限公司 “重慶西部科學城多水廠分區分壓供水優化調度研究項目&#xff08;軟件測試標段&#xff09;”。 此次中標不僅是市場…

銀河麒麟V10一鍵安裝DM8的腳本及高階運維SQL分享

介質下載地址名稱網址銀河麒麟高級服務器操作系統V10&#xff08;SP3&#xff09;用戶手冊https://www.kylinos.cn/support/document/60.htmlDM8 安裝手冊https://eco.dameng.com/document/dm/zh-cn/pm/install-uninstall.htmlDM 數據庫安裝&#xff08;Linux安裝&#xff09;h…

cobalt strike(CS)與Metasploit(MSF)聯動

CS —> MSF首先cs上創建一個http的外部監聽器。此時在CS服務端查看監聽的ip&#xff0c;發現并沒有開啟&#xff0c;需要到成功移交會話后才會啟動。netstat -tunlp | grep 7000在MSF中使用handler模塊&#xff0c;配置監聽。注意&#xff1a;目標機器的地址是rhost&#xf…

C# 類型

原文&#xff1a;C# 類型_w3cschool C#類型 類型定義值的藍圖。有不同的操作與不同類型相關聯。 在下面的示例中&#xff0c;我們使用兩個類型為int的常量&#xff0c;值為2 和 3。 static void Main() {int x 2 * 3;Console.WriteLine (x); } int 是一個表示整數值的構建…

確保TDesign Vue Next中t-color-picker組件在彈出顏色拾取面板時保證該面板不抖動方法參考

使用TDesign Vue Next中的組件t-color-picker時&#xff0c;在顏色面板彈出后&#xff0c;如果修改里面的顏色&#xff0c;發現這個顏色拾取面板會隨著顏色的改變位置不斷抖動&#xff0c;該問題由顯示顏色的數值文本的長度變化引起&#xff0c;因此要覆蓋組件內部顏色值文本的…

bypass

代碼解析修改自身bypass&#xff1a;第一句話$s"Declaring file object\n";定義一個s&#xff0c;值為Declaring file object第二句話$d$_SERVER[DOCUMENT_ROOT].$_SERVER[DOCUMENT_URI]; 不知道$_SERVER是什么&#xff0c;那就打印出來看看。輸入echo <pre>;…

C語言:構造類型學習

內容提要 構造類型 枚舉類型typedef 綜合案例&#xff1a;斗地主 構造類型 枚舉類型 建議&#xff1a;如果定義不相干的常理&#xff0c;使用宏定義&#xff08;符號常量&#xff09;&#xff1b;如果需要定義一組相關聯的常量&#xff0c;如月份0~11&#xff0c;星期0~6&#…

Prometheus-3--Prometheus是怎么抓取Java應用,Redis中間件,服務器環境的指標的?

1、Prometheus抓取Java應用的指標 1、數據來源&#xff1a;Java應用自身暴露的指標 Java應用的指標數據來源于應用代碼中定義的指標對象&#xff08;如Counter、Gauge、Histogram等&#xff09;&#xff0c;通過Prometheus客戶端庫&#xff08;如io.prometheus:client_java&…