leetcode 面試經典 150 題:刪除有序數組中的重復項

鏈接刪除有序數組中的重復項
題序號26
題型數組
解題方法雙指針
難度簡單
熟練度?????

題目

給你一個 非嚴格遞增排列 的數組 nums ,請你 原地 刪除重復出現的元素,使每個元素 只出現一次 ,返回刪除后數組的新長度。元素的 相對順序 應該保持 一致 。然后返回 nums 中唯一元素的個數

考慮 nums 的唯一元素的數量為 k ,你需要做以下事情確保你的題解可以被通過:

更改數組 nums ,使 nums 的前 k 個元素包含唯一元素,并按照它們最初在 nums 中出現的順序排列。nums 的其余元素與 nums 的大小不重要。
返回 k 。

  • 判題標準:
    系統會用下面的代碼來測試你的題解:
    int[] nums = […]; // 輸入數組
    int[] expectedNums = […]; // 長度正確的期望答案
    int k = removeDuplicates(nums); // 調用
    assert k == expectedNums.length;
    for (int i = 0; i < k; i++) {
    assert nums[i] == expectedNums[i];
    }
    如果所有斷言都通過,那么您的題解將被 通過。

  • 示例 1:
    輸入:nums = [1,1,2]
    輸出:2, nums = [1,2,_]
    解釋:函數應該返回新的長度 2 ,并且原數組 nums 的前兩個元素被修改為 1, 2 。不需要考慮數組中超出新長度后面的元素。

  • 示例 2:
    輸入:nums = [0,0,1,1,1,2,2,3,3,4]
    輸出:5, nums = [0,1,2,3,4]
    解釋:函數應該返回新的長度 5 , 并且原數組 nums 的前五個元素被修改為 0, 1, 2, 3, 4 。不需要考慮數組中超出新長度后面的元素。

  • 提示:
    1 <= nums.length <= 3 * 104
    -104 <= nums[i] <= 104
    nums 已按 非嚴格遞增 排列

題解

  1. 核心要點:快慢指針同時指向索引 1,前后不相同,快慢指針都向前走一步,前后相同,慢指針不走快指針走一步;
  2. 時間復雜度:O(n)
  3. 空間復雜度:O(1)
  4. c++ 實現算法
class Solution {
public:int removeDuplicates(vector<int>& nums)  {int n = nums.size();if (n == 0) {return 0;}int fast = 1, slow = 1;while (fast < n) {if (nums[fast] != nums[fast - 1]) {nums[slow] = nums[fast];++slow;}++fast;}nums.resize(slow);return slow;}
};
  1. 演示

    • 示例
      假設輸入數組 nums = [1, 1, 2, 3, 3, 4, 5]。
    • 遍歷過程
      初始化時,fast = 1, slow = 1。
      nums[fast] = 1,與 nums[fast - 1] = 1 相等,跳過。
      fast = 2,nums[fast] = 2,與 nums[fast - 1] = 1 不相等,放到 nums[slow],nums[slow] = 2,slow++,slow = 2。
      fast = 3,nums[fast] = 3,與 nums[fast - 1] = 2 不相等,放到 nums[slow],nums[slow] = 3,slow++,slow = 3。
      fast = 4,nums[fast] = 3,與 nums[fast - 1] = 3 相等,跳過。
      fast = 5,nums[fast] = 4,與 nums[fast - 1] = 3 不相等,放到 nums[slow],nums[slow] = 4,slow++,slow = 4。
      fast = 6,nums[fast] = 5,與 nums[fast - 1] = 4 不相等,放到 nums[slow],nums[slow] = 5,slow++,slow = 5。
    • 最終,slow = 5,數組 nums 被調整為 [1, 2, 3, 4, 5],返回值為 5。
  2. c++ 完整 demo

#include <iostream>
#include <vector>using namespace std;class Solution {
public:int removeDuplicates(vector<int>& nums)  {int n = nums.size();if (n == 0) {return 0;}int fast = 1, slow = 1;while (fast < n) {if (nums[fast] != nums[fast - 1]) {nums[slow] = nums[fast];++slow;}++fast;}nums.resize(slow);return slow;}
};int main() {vector <int> nums = {0, 0, 1, 1, 1, 2, 2, 3, 3, 4}; //數組必須是非嚴格遞增,該算法才有效,若是無序數組,可以先排序sort下再移除。Solution solution;int number =  solution.removeDuplicates(nums);cout << "number: " << number << endl;cout << "nums.size: " << nums.size() << endl;for(int i = 0; i < nums.size(); i++){cout << "i: " << i << "; nums[" << i << "]: " << nums[i] << endl;}return 0;
}

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

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

相關文章

提升生產力工具

VSCODE插件 干貨&#xff1a;用好這13款VSCode插件&#xff0c;工作效率提升10倍 - 程序員檸檬 - 博客園 Sourcetrail Sourcetrail 是一個開源且免費的源碼閱讀工具&#xff0c;以其強大的代碼導航、可視化及跨平臺支持特性&#xff0c;成為開發者理解復雜代碼庫的得力助手。…

什么是 Git Hooks?

在團隊開發中&#xff0c;當成員提交代碼的描述信息不符合約定提交規范的時候&#xff0c;需要阻止當前的提交&#xff0c;而要實現這個目的&#xff0c;我們就需要先來了解一個概念&#xff0c;叫做 Git hooks&#xff0c;即Git 在執行某個事件之前或之后進行一些其他額外的操…

Go語言方法和接收器類型詳解

Go語言方法和接收器類型詳解 1. 方法接收器類型 1.1 值接收器 值接收器方法不會改變接收器的狀態&#xff0c;因為Go語言會在調用時復制接收器的值。因此&#xff0c;任何對接收器成員變量的修改都只會影響副本&#xff0c;而不會影響原始結構體實例。 type Person struct …

MS SQL Server 實戰 排查多列之間的值是否重復

目錄 需求 范例運行環境 數據樣本設計 功能實現 上傳EXCEL文件到數據庫 SQL語句 小結 需求 在日常的應用中&#xff0c;排查列重復記錄是經常遇到的一個問題&#xff0c;但某些需求下&#xff0c;需要我們排查一組列之間是否有重復值的情況。比如我們有一組題庫數據&am…

抖去推碰一碰系統技術源碼/open SDK轉發技術開發

抖去推碰一碰系統技術源碼/open SDK轉發技術開發 碰一碰智能系統#碰碰卡系統#碰一碰系統#碰一碰系統技術源頭開發 碰碰卡智能營銷系統開發是一種集成了人工智能和NFC技術的工具&#xff0c;碰碰卡智能營銷系統通過整合數據分析、客戶關系管理、自動化營銷活動、多渠道整合和個…

redis優化

在高并發、高性能、高可用系統中&#xff0c;Redis 的優化至關重要。以下是一些在面試中可以詳細說明的 Redis 優化策略&#xff0c;以及具體的實踐經驗和技術亮點&#xff1a; 1. 數據模型與結構設計優化 使用合適的數據結構 &#xff1a;根據業務需求選擇合適的 Redis 數據結…

WEB攻防-通用漏洞-文件上傳-js驗證-MIME驗證-user.ini-語言特征

目錄 定義 1.前端驗證 2.MIME驗證 3.htaccess文件和.user. ini 4.對內容進行了過濾&#xff0c;做了內容檢測 5.[ ]符號過濾 6.內容檢測php [] {} ; 7.()也被過濾了 8.反引號也被過濾 9.文件頭檢測 定義 文件上傳漏洞是指攻擊者上傳了一個可執行文件&#xff08;如木馬…

探索與決策的完美結合:Actor-Critic 方法及其衍生算法

引言 在強化學習領域&#xff0c;如何讓智能體學會做出最優決策是一個關鍵問題。Actor-Critic 方法提供了一種高效的解決方案&#xff0c;它結合了策略梯度&#xff08;Actor&#xff09;和值函數&#xff08;Critic&#xff09;的優點&#xff0c;使智能體能夠在復雜的環境中…

未來網絡技術的新征程:5G、物聯網與邊緣計算(10/10)

一、5G 網絡&#xff1a;引領未來通信新潮流 &#xff08;一&#xff09;5G 網絡的特點 高速率&#xff1a;5G 依托良好技術架構&#xff0c;提供更高的網絡速度&#xff0c;峰值要求不低于 20Gb/s&#xff0c;下載速度最高達 10Gbps。相比 4G 網絡&#xff0c;5G 的基站速度…

數據交易和聯邦學習的背景下的安全屬性

數據交易和聯邦學習的背景下的安全屬性 在數據交易和聯邦學習的背景下,安全屬性對于保護數據隱私、確保系統可靠性和維護交易公平性至關重要。以下將分析文章中涉及的安全屬性以及分析這些屬性的目的。 涉及的安全屬性 雙向認證:文章雖未明確提及傳統意義上的雙向認證機制,…

QWT 之 QwtPlotDirectPainter直接繪制

QwtPlotDirectPainter 是 Qwt 庫中用于直接在 QwtPlot 的畫布上繪制圖形的一個類。它提供了一種高效的方法來實時更新圖表&#xff0c;特別適合需要頻繁更新的數據可視化應用&#xff0c;例如實時數據流的顯示。 使用 QwtPlotDirectPainter 的主要優勢在于它可以繞過 QwtPlot 的…

改變HTML元素的方式有哪些?如何在HTML中添加/替換或刪除元素?

使用 JavaScript 的 DOM 操作 如果想要修改元素的樣式&#xff0c;就要先獲取元素之后再進行下一步操作 獲取元素&#xff1a;可以使用等方法獲取到需要操作的 HTML 元素。 document.getElementById() document.getElementsByClassName() document.getElementsByTagName() d…

SuperMap iClient3D for Cesium等高線標注

kele 前言 在三維地形分析中&#xff0c;等高線分析是一種非常重要的分析方法&#xff0c;它能直觀的表達出地形的高低起伏特征&#xff0c;在三維系統中受到廣泛應用。在SuperMap iClient3D for Cesium中&#xff0c;等高線分析是前端GPU分析&#xff0c;能夠分析并渲染出等高…

從 x86 到 ARM64:CPU 架構的進化與未來

在計算機發展的歷史長河中&#xff0c;x86、x64 和 ARM64 這三大主流 CPU 架構各自書寫了輝煌的篇章。它們不僅代表了技術的進步&#xff0c;更承載著無數創新者的夢想與努力。 x86&#xff1a;從 16 位到 32 位的輝煌之路 誕生與崛起 1978 年&#xff0c;英特爾&#xff08;…

紅魔電競PadPro平板解BL+ROOT權限-KernelSU+LSPosed框架支持

紅魔Padpro設備目前官方未開放解鎖BL&#xff0c;也閹割了很多解鎖BL指令&#xff0c;造成大家都不能自主玩機。此規則從紅魔8開始&#xff0c;就一直延續下來&#xff0c;后續的機型大概率也是一樣的情況。好在依舊有開發者進行適配研究&#xff0c;目前紅魔PadPro平板&#x…

TCP Analysis Flags 之 TCP Out-Of-Order

前言 默認情況下&#xff0c;Wireshark 的 TCP 解析器會跟蹤每個 TCP 會話的狀態&#xff0c;并在檢測到問題或潛在問題時提供額外的信息。在第一次打開捕獲文件時&#xff0c;會對每個 TCP 數據包進行一次分析&#xff0c;數據包按照它們在數據包列表中出現的順序進行處理。可…

<數據集>風力發電機損傷識別數據集<目標檢測>

數據集下載鏈接 &#xff1c;數據集&#xff1e;風力發電機損傷識別數據集&#xff1c;目標檢測&#xff1e;https://download.csdn.net/download/qq_53332949/90187097數據集格式&#xff1a;VOCYOLO格式 圖片數量&#xff1a;2527張 標注數量(xml文件個數)&#xff1a;252…

C++ 設計模式:工廠方法(Factory Method)

鏈接&#xff1a;C 設計模式 鏈接&#xff1a;C 設計模式 - 抽象工廠 鏈接&#xff1a;C 設計模式 - 原型模式 鏈接&#xff1a;C 設計模式 - 建造者模式 工廠方法&#xff08;Factory Method&#xff09;是創建型設計模式之一&#xff0c;它提供了一種創建對象的接口&#xf…

分布式版本管理工具——Git關聯遠程倉庫(github+gitee)

Git遠程倉庫&#xff08;Github&#xff09;的基本使用 一、前言二、Git遠程倉庫介紹三、演示1. 關聯github遠程倉庫2. 關聯gitee&#xff08;碼云&#xff09;遠程倉庫3. 重命名遠程倉庫名4. 移除遠程倉庫 四、結束語 一、前言 古之立大事者&#xff0c;不惟有超世之才&#x…

在 React 項目中安裝和配置 Three.js

React 與 Three.js 的結合 &#xff1a;通過 React 管理組件化結構和應用邏輯&#xff0c;利用 Three.js 實現 3D 圖形的渲染與交互。使用這種方法&#xff0c;我們可以在保持代碼清晰和結構化的同時&#xff0c;實現令人驚嘆的 3D 效果。 在本文中&#xff0c;我們將以一個簡…