雙指針算法專題之——復寫零

文章目錄

  • 題目介紹
  • 思路分析
    • 異地復寫
    • 優化為就地復寫
  • AC代碼

題目介紹

鏈接: 1089. 復寫零

在這里插入圖片描述

思路分析

那么這道題我們依然可以使用雙指針算法來解決

異地復寫

先不考慮題目的要求,直接就地在原數組上修改,可能不太好想,我們這里可以先在一個新開的數組上進行復寫

起始雙指針分別指向兩個數組0下標在這里插入圖片描述
如果cur指向的元素是非0,dest只把cur的值拷貝下來,無需復寫(只有0才復寫),然后兩者都++
在這里插入圖片描述
cur如果指向0,那dest要拷貝兩次(復寫一次),然后兩者都++
在這里插入圖片描述
后續也是如此
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
其實很簡單,就是模擬題目要求的復寫操作,非0不動,0復寫
對比一下題目的例子,結果是正確的
在這里插入圖片描述

優化為就地復寫

那接下來我們就要嘗試在上面的基礎上進行優化,優化為原地復寫
怎么做呢?現在就只能在原數組上就地操作了

我們來嘗試一下:

在這里插入圖片描述
上來cur指向非0
無需任何操作,兩者++即可,剛才我們要拷貝是因為dest指向一個新數組,現在都指向原數組
在這里插入圖片描述
然后cur是0,所以要復寫一次0
在這里插入圖片描述
那就變成這樣了。
這樣其實已經不行了,因為2被復寫的0覆蓋掉了,而cur++之后又指向了剛剛復寫的0,這樣后面都是0了,肯定的不對的

所以這道題從前向后移動指針是不行的,那我們可以反過來看看!

從后向前呢?
在這里插入圖片描述
那兩個指針都指向最后一個元素嗎?
🆗,dest呢從最后一個位置開始,而cur,我們讓它一開始指向最后一個被處理的數。
因為最后一個被處理的數處理完畢一定是在數組最后一個位置的。
怎么找最后一個處理的數我們后面說,但是對于當前這個例子,我們知道最后一個處理的數,就是4
在這里插入圖片描述
然后,就讓它們從后往前移動,進行像上面異地復寫一樣的操作就行了
在這里插入圖片描述
答案正確!

總結一下:

先找到最后一個被處理的數,然后從后往前進行復寫即可

那現在關鍵問題在于,對于任意一個數組,我們如何找到它最后一個處理的元素是誰?

那么這個問題也可以使用雙指針來解決!
怎么做呢?
依然用上面這個例子
在這里插入圖片描述
讓cur從0開始,dest從-1開始,然后,其實就是去模擬整個復寫的過程。
如果cur指向的是非0,讓dest走一步(只拷貝,不復寫),然后cur++;
如果是0,則dest走兩步(拷貝+復寫),然后cur++
當dest走到最后一個位置時候,就結束了,再走就越界了,此時,cur指向的元素就是最后一個被處理的數。
這個我就不再畫圖了,大家如果不理解可以自己畫一下圖走一遍。

但是,還有一種情況需要考慮:

在這里插入圖片描述
如果最后一個被處理的數是0,這時dest往后走兩步有可能出現越界的情況。
所以,針對這種情況,我們可以處理一下:
此時0就是最后一個被處理的數,cur從0開始倒著處理,那此時dest應該拷貝+復寫,然后兩者都- -
但是此時dest是越界的,即執行拷貝的位置是越界的,所以cur直接- -,然后復寫一個0,然后兩者都- -。
即把n-1下標置0,cur- -,dest-=2。
后續正常處理就行。

AC代碼

上面分析的比較清楚了,代碼就不過多解釋了
在這里插入圖片描述
在這里插入圖片描述

class Solution {
public:void duplicateZeros(vector<int>& arr) {int n = arr.size();// 1.先找到最后一個被處理的元素int cur = 0;int dest = -1;while (dest < n - 1) {if (arr[cur] != 0)dest++;elsedest += 2;if (dest >= n - 1)break; // 如果dest>=n-1(走到最后一個位置或者越界的情況),// 此時cur就是最后一個被處理的元素,不能再++了,直接breakcur++;}// 2.處理一下dest越界的情況if (dest == n) {arr[n - 1] = 0;cur--;dest -= 2;}// 3.從后往前進行復寫while (dest >= 0) {if (arr[cur] != 0)arr[dest] = arr[cur];else {arr[dest] = 0;arr[--dest] = 0;}cur--;dest--;}}
};

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

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

相關文章

Python控制語句 ——break和continue

1.以下關于Python循環結構的描述中,錯誤的是() 。 A、break用來結束當前當次語句,但不跳出當前的循環體。 B、遍歷循環中的遍歷結構可以是字符串、文件、組合數據類型和range函數等。 C、Python通過for,while等保留字構建循環結構。 D、continue只結束本次循環。 答案:A。在…

搭建阿里云專有網絡VPC

目錄 一、概述 二、專有網絡vpc 2.1 vpc基本信息 2.2 vpc資源管理 2.3 vpc網段管理 三、交換機 四、NAT網關 4.1 綁定彈性公網IP 4.2 NAT網關信息 4.3 綁定的彈性公網IP 4.4 DNAT 4.5 SNAT 五、彈性公網IP 六、訪問控制ACL&#xff08;綁定交換機&#xff09; 6…

阿里巴巴發布 R1-Omni:首個基于 RLVR 的全模態大語言模型,用于情感識別

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

《深度剖析:鴻蒙系統下智能NPC與游戲劇情的深度融合》

在游戲開發領域&#xff0c;鴻蒙系統的崛起為開發者們帶來了前所未有的機遇與挑戰。尤其是在開發基于鴻蒙系統的人工智能游戲時&#xff0c;實現智能NPC的行為邏輯與游戲劇情緊密結合&#xff0c;成為了打造沉浸式游戲體驗的關鍵。 鴻蒙系統作為一款面向全場景的分布式操作系統…

聚劃算!三個模型對比預測!CNN-GRU、GRU、CNN三模型多變量時序光伏功率預測

聚劃算&#xff01;三個模型對比預測&#xff01;CNN-GRU、GRU、CNN三模型多變量時序光伏功率預測 目錄 聚劃算&#xff01;三個模型對比預測&#xff01;CNN-GRU、GRU、CNN三模型多變量時序光伏功率預測預測效果基本介紹程序設計參考資料 預測效果 基本介紹 CNN-GRU、GRU、CN…

C# 的 ManualResetEvent(線程同步操作) 類詳解

C# 的 ManualResetEvent 類詳解 作用 ManualResetEvent 是用于線程同步操作的類&#xff0c;允許一個或多個線程等待特定信號&#xff0c;以協調多個線程的執行順序。它通過事件通知機制實現&#xff0c;確保線程在收到信號前保持阻塞&#xff0c;直到其他線程顯式發出信號。…

小白學習:提示工程(什么是prompt)

課程鏈接 https://www.bilibili.com/video/BV1PX9iYQEry/?spm_id_from333.337.search-card.all.click 一 什么是提示工程 【提示工程】也叫【指令工程】 prompt就是給大模型發的指令&#xff0c;如“給我講個笑話” 懂得提示工程原理會帶來什么優勢 懂得原理 為什么有的指…

Docker Compose 之詳解(Detailed Explanation of Docker Compose)

Docker Compose 之詳解 當容器數量逐漸增多&#xff0c;你是否感到手忙腳亂&#xff1f;面對復雜的部署場景&#xff0c;是時候祭出神器Docker Compose了&#xff01;它能幫你優雅地管理多容器應用&#xff0c;一鍵啟動、停止所有服務&#xff0c;不再為復雜的手動操作焦頭爛額…

C語言 —— 此去經年夢浪蕩魂音 - 深入理解指針(卷一)

目錄 1. 內存和地址 2. 指針變量和地址 2.1 取地址操作符&#xff08;&&#xff09; 2.2 指針變量 2.3 解引用操作符 &#xff08;*&#xff09; 3. 指針的解引用 3.1 指針 - 整數 3.2 void* 指針 4. const修飾指針 4.1 const修飾變量 4.2 const修飾指針變量 5…

【AI】從頭到腳詳解如何創建部署Azure Web App的OpenAI項目

【AI】從頭到腳詳解如何創建部署Azure Web App的OpenAI項目 在Azure Web應用上,您可以使用Python的OpenAI包方便快捷地調用官方API,上傳您的訓練數據,并利用他們的算法進行處理。本教程提供了一個逐步指南,幫助您在Azure Web應用上部署您的OpenAI項目,涵蓋了從資源設置到…

機器視覺工程師紅外相機的選擇:紅外長波工業相機和短波紅外工業相機玄機大總結

紅外長波(LWIR)和短波(SWIR)工業相機在原理、應用場景和技術特點上有顯著差異。以下是它們的對比分析: 1. 波長范圍與成像原理 2. 技術特點 3. 典型應用場景 4. 優缺點對比 LWIR優勢: 無需光照,適用于完全黑暗環境。 直接反映物體溫度分布。 對煙霧、灰塵穿透能力強。…

uni-app學習筆記——自定義模板

一、流程 1.這是一個硬性的流程&#xff0c;只要按照如此程序化就可以實現 二、步驟 1.第一步 2.第二步 3.第三步 4.每一次新建頁面&#xff0c;都如第二步一樣&#xff1b;可以選擇自定義的模版&#xff08;vue3Setup——這是我自己的模版&#xff09;&#xff0c;第二步的…

DeepSeek模型本地化部署方案及Python實現

DeepSeek實在是太火了&#xff0c;雖然經過擴容和調整&#xff0c;但反應依舊不穩定&#xff0c;甚至小圓圈轉半天最后卻提示“服務器繁忙&#xff0c;請稍后再試。” 故此&#xff0c;本文通過講解在本地部署 DeepSeek并配合python代碼實現&#xff0c;讓你零成本搭建自己的AI…

Vue3計算屬性深度解析:經典場景與Vue2對比

一、計算屬性的核心價值 計算屬性&#xff08;Computed Properties&#xff09;是Vue響應式系統的核心特性之一&#xff0c;它通過依賴追蹤和緩存機制優雅地解決模板中復雜邏輯的問題。當我們需要基于現有響應式數據進行派生計算時&#xff0c;計算屬性總能保持高效的性能表現…

python-leetcode-刪除鏈表的倒數第 N 個結點

LCR 021. 刪除鏈表的倒數第 N 個結點 - 力扣&#xff08;LeetCode&#xff09; 可以使用雙指針方法來解決這個問題&#xff0c;這樣可以在一次遍歷內完成刪除操作&#xff0c;從而達到 O(n) 的時間復雜度。以下是 Python 代碼實現&#xff1a; 解題思路&#xff1a; 初始化快…

vue2的webpack(vue.config.js) 怎么使用請求轉發 devServer.proxy

首先用 express 搭建后端服務器&#xff0c;注意使用中間件解析json格式的請求體&#xff0c;才會獲取到 post 參數 app.use(express.json()); app.js const express require(express) const app express() app.use(express.json()); const port 3000app.post(/api/vue2, …

Linux:基本指令與內涵理解

1.文件操作指令 1.1 ls ls指令用于查看指定層級文件夾下的文件或文件夾 基本格式&#xff1a;ls (選項) (查看層級&#xff09; 其中選項處不寫就默認是顯示文件名&#xff0c;查看層級默認是當前層級 選項1&#xff1a; -l 作用&#xff1a;將查找文件的詳細信息顯示出來 我們…

SpaceSync智能排班:重構未來辦公空間的神經中樞

文心智能體平臺可免費使用DeepSeek 滿血版啦&#xff0c;使用DeepSeek模型創建并提交智能體&#xff0c;即有機會瓜分萬元獎金&#xff01;有這等好事還不快沖&#xff01; 文心智能體官網&#xff1a;文心智能體平臺AgentBuilder | 想象即現實 本片文章為作者參加文心智能體平…

flutter dio庫 源碼賞析

1. factory函數 //調用factory構造方法后&#xff0c;實際返回的是Dio的子類 Dio dio Dio();abstract class Dio {factory Dio([BaseOptions? options]) > createDio(options); } 2. CancelToken 作用:取消操作 CancelToken cancelToken CancelToken();//監聽取消 ca…

RGV調度算法

1、基于時間窗 https://wenku.baidu.com/view/470e9fd8b4360b4c2e3f5727a5e9856a57122693.html?_wkts_1741880736197&bdQuery%E7%8E%AF%E7%A9%BF%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95 2.2019年MathorCup高校數學建模挑戰賽B題 2019-mathorcupB題-環形穿梭機調度模型&a…