力扣精選算法100道——顏色分類(雙指針和三指針倆種方法解決此題)

目錄

🚩了解題意

🚩算法分析

第一種方法:雙指針

🚩代碼實現一

第二種方法:三指針

🚩代碼實現二


🚩了解題意

本題將整數0,1,2代表紅白籃,nums中的整數并不是按照紅白藍的順序排列,我們要做的就是讓nums中的整數按紅白藍排列,比如樣例中的nums={2,0,2,1,1,0}最終按照紅0白1籃2的順序排列,最終的結果是{0,0,1,1,2,2}。

就是將0紅排列在一起,1白排列在一起,2藍排列在一起。


🚩算法分析

第一種方法:雙指針

利用i進行遍歷數組,ptr來進行劃分范圍,最終得到的結果是

[0,ptr-1] 紅色

[ptr,size-1] 白色和藍色

如果nums[i]==0的時候我們就將nums[i]的值和nums[ptr]的值交換,然后ptr++

i遍歷完之后,我們看到所有的0都再最左邊,再進行一次遍歷,但是這時候的i是從ptr開始的

因為上面nums[i]和nums[ptr]交換位置之后,ptr++,所以ptr再下標2的位置。i從下標2開始進行。

如果遇到nums[i]==1的時候,我們就將nums[i]和nums[ptr]交換位置,ptr++。


🚩代碼實現一

class Solution {
public:void sortColors(vector<int>& nums) {int n = nums.size();int ptr = 0;for (int i = 0; i < n; ++i) {if (nums[i] == 0) {swap(nums[i], nums[ptr]);++ptr;}}for (int i = ptr; i < n; ++i) {if (nums[i] == 1) {swap(nums[i], nums[ptr]);++ptr;}}}
};

第二種方法:三指針

利用i來遍歷數組,left作為左指針,right作為右指針

如果nums[i]==0,先讓left++,然后與nums[i]和nums[left]交換位置,然后i++。

如果nums[i]==2,先讓--right,然后與nums[i]和nums[right]交換位置。

注意:這里的i并不往后走,因為i是待掃描的區域,就是Num[i]是未知的數字,我們要繼續判斷nums[i]是等于多少,再進行一次判斷。

此時繼續判斷nums[i]等于多少,此時的nums[i]==2,那么讓right先--,然后交換nums[i]和nums[right]的值。

如果我們不知道nums[i]的值,我們就不能讓i++.

如果nums[i]==1,我們直接就讓i++

最終的循環判斷條件就是 i<right即可,i與right相遇就結束循環。


🚩代碼實現二

class Solution {
public:void sortColors(vector<int>& nums) {int left=-1,right=nums.size();int n=nums.size();int i=0;while(i<right){if(nums[i]==0)swap(nums[++left],nums[i++]);else if(nums[i]==1)i++;else swap(nums[--right],nums[i]);//此時的i不能++,因為i對應的值是未掃描的部分}}
};

關關難過。

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

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

相關文章

仿牛客網項目---私信列表和發送列表功能的實現

這篇文章我們來講一下我的這個項目的另外一個功能&#xff1a;私信列表和發送列表功能。 先來設計DAO層。 Mapper public interface MessageMapper {// 查詢當前用戶的會話列表,針對每個會話只返回一條最新的私信.List<Message> selectConversations(int userId, int of…

【激光SLAM】基于已知位姿的構圖算法 (Grid-based)

文章目錄 地圖分類概念 覆蓋柵格建圖算法柵格地圖的特征數學描述假設 算法流程激光雷達的逆觀測模型 計數(Count Model)建圖算法概念數學描述觀測模型地圖估計 地圖分類 概念 地圖即為環境的空間模型。環境地圖是機器人進行定位和規劃的前提。定位可以用特征地圖&#xff08;…

可穿戴設備相關Python包【待更】

提供7個python 包。 1 2 3 4 5 6 7 pyActigraphyGitHub - ghammad/pyActigraphy: Python-based open source package for actigraphy data analysisActiGraph ActiGraph GitHub

基礎內容哦!!!吳恩達deeplearning.ai:利用計算圖求導(反向傳播)

以下內容有任何不理解可以翻看我之前的博客哦&#xff1a;吳恩達deeplearning.ai專欄 文章目錄 一個小型神經網絡的例子利用計算圖逐步計算價值函數J利用計算圖求出價值函數的導數 計算圖是深度學習中的一個關鍵概念&#xff0c;它也是Tensorflow等編程框架自動計算神經網絡導…

Linux之sed命令詳解及實踐

1、定義 sed全稱是&#xff1a;stream editor 流編輯器 對文件的操作無非就是”增刪改查“&#xff0c;**sed命令就是實現對文件的”增刪改查“。** **man sed//man 的解釋** 用于過濾和轉換文本的流編輯器 2、功能 Sed 主要用來自動編輯一個或多個文件、簡化對文件的反復…

實現定時器的兩種方法:使用windows api定時器 和使用c++11/14 定時器

前言&#xff1a; 當我有一個開發需求&#xff0c;符合下面的條件 1.需要某個任務在程序中每隔一段時間就要執行一次&#xff0c;可能把這個任務封裝成了一個函數。 2.這種需要定時執行的任務&#xff0c;有2個&#xff0c;3個....越來越多。 這個時候我們就可以考慮使用定時…

iOS高級理論:常用的架構模式

一、常用的架構模式簡介 在 iOS 開發中&#xff0c;常用的架構模式有以下幾種&#xff1a; MVC&#xff08;Model-View-Controller&#xff09;模式&#xff1a;是 iOS 開發中最常見的架構模式。在 MVC 模式中&#xff0c;Model 負責數據處理和業務邏輯&#xff0c;View 負責界…

Tcl文件訪問

1. 基本文件輸入輸出命令 open 文件名 方式 set f [open $filename "r"] f 是文件的通道ID,可以使用open命令打開文件并獲取通道ID r 只讀方式打開,文件必須已經存在 r+ 讀寫方式打開,文件必須已經存在 w 只寫方式打開文件,如果文件存在則清空文件內容,否則創建…

第三百七十六回

文章目錄 1 .概念介紹2. 實現方法3. 示例代碼 我們在上一章回中介紹了在頁面之間共傳遞數據相關的內容&#xff0c;本章回中將介紹如何攔截路由.閑話休提&#xff0c;讓我們一起Talk Flutter吧。 1 .概念介紹 本章回中介紹的路由攔截是指在路由運行過程中&#xff0c;對路由做…

會了會了會了

public class text9 {/*在實際開發中&#xff0c;如果我們需要在多種情況中選擇其中一個,就可以用switch語句。當我m們撥打電話&#xff0c;會有一些按鍵選擇。假設我們撥打了一個機票預訂電話&#xff0c;電話中提示&#xff1a;1機票查詢2機票預訂3機票改簽4退出服務其他按鍵…

論文閱讀_代碼生成模型_CodeLlama

英文名稱: Code Llama: Open Foundation Models for Code 中文名稱: Code Llama&#xff1a;開放基礎代碼模型 鏈接: https://arxiv.org/abs/2308.12950 代碼: https://github.com/facebookresearch/codellama 作者: Baptiste Rozire, Jonas Gehring, Fabian Gloeckle, Sten So…

【前端素材】推薦優質在線花卉商城電商網頁Flowery平臺模板(附源碼)

一、需求分析 1、系統定義 在線花卉商城是一個通過互聯網提供花卉銷售服務的電子商務平臺&#xff0c;用戶可以在該平臺上瀏覽、選擇和購買各種花卉產品。 2、功能需求 在線花卉商城是一個通過互聯網提供花卉銷售服務的電子商務平臺&#xff0c;用戶可以在該平臺上瀏覽、選…

vscode在windows環境不能使用終端安裝依賴

會報這樣的錯誤提示 解決思路&#xff1a; 1、vscode用管理員打開 (非必須) 2、設置策略 打開 windows powerShell . 輸入命令 set-ExecutionPolicy RemoteSigned 然后 Y . 查看是否設置成功 get-executionpolicy 3、下載總是超時&#xff0c;設置鏡像源 查看鏡像源 npm …

【知識分享】vue制作一個頁面計算器

1.制作思路 制作一個簡單的頁面計算器可以分為以下幾個步驟&#xff1a; &#xff08;1&#xff09;創建 Vue 組件&#xff0c;包括顯示屏和按鈕組件。 &#xff08;2&#xff09;設置數據屬性&#xff0c;用于存儲計算器的當前狀態&#xff08;如顯示屏上的數字&#xff09…

藍橋杯-天數

//此題屬于簡單 #include <iostream> using namespace std; int main() { int n; cin>>n; if(n2) { cout<<28; return 0; } if(n1||n3||n5||n7||n8||n10||n12)//一定要記得寫成n什么&#xff0c;每個都要寫&#xff0c;不要漏掉 { cou…

常見漏洞的流量特征

1、SQL注入漏洞 查看url / Referer字段/User-Agent字段/cookie字段 出現一些特殊字符&#xff08;eg&#xff1a;單引號【‘】、雙引號【“”】、括號【&#xff08;&#xff09;】、單引號括號【‘&#xff08;】、雙引號括號【“&#xff08;】等一些常見的特殊的字符&#…

數通HCIE和云計算HCIE哪個好一點?

數通是網絡的基礎知識&#xff0c;也是入門人員必學的方向&#xff0c;相對也會簡單些&#xff0c;學習數通&#xff0c;可以很好的學習其他的方向。數通的就業范圍也比較廣&#xff0c;運營商、企業、政府還是互聯網公司&#xff0c;都需要大量的數通工程師來搭建和維護網絡&a…

探索rsync遠程同步和SSH免密登錄的奧秘

目錄 集群分發腳本xsyncscp&#xff08;secure copy&#xff09;安全拷貝rsync 遠程同步工具集群分發腳本 SSH免密登錄免密登錄原理SSH免密登錄配置生成公鑰和私鑰授權測試 在現代科技飛速發展的時代&#xff0c;數據的備份和遷移成為了一個重要的課題。其中&#xff0c;rsync遠…

大數據畢業設計之前端04:管理系統為什么要自己實現圖標組件

關鍵字&#xff1a;BuildAdmin、Icon、圖標、Vue、ElementUI 前言 說到圖標&#xff0c;在BuildAdmin中用到的地方很多。比如上一篇中的折疊圖標&#xff0c;還有菜單欄圖標、導航菜單欄圖標等。常見的圖標有&#xff1a;ElementUI圖標、font-awesome、iconfont阿里圖標以及本…

94. 遞歸實現排列型枚舉 刷題筆記

思路 依次枚舉 每個位置用哪個數字 要求按照字典序最小來輸出 而每次搜索下一層時i都是從1開始 也就是說 如果有小的數可以填上 那么該方案會填上這個數字 例如 當n等于3 第一次搜索 1 2 3輸出后返回 返回后此時i3 第二個位置填3 1 3 2 輸出后返回 此時返回到第一層…