26. 刪除有序數組中的重復項(remove-duplicates-from-sorted-array)

26. 刪除有序數組中的重復項(remove-duplicates-from-sorted-array)

給你一個 非嚴格遞增排列 的數組 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 * 10^4
  • -10^4 <= nums[i] <= 10^4
  • nums 已按 非嚴格遞增 排列

首先注意數組是有序的,那么重復的元素一定會相鄰。

要求刪除重復元素,實際上就是將不重復的元素移到數組的左側。

考慮用 2 個指針,一個在前記作 p,一個在后記作 q,算法流程如下:

1.比較 p 和 q 位置的元素是否相等。

如果相等,q 后移 1 位
如果不相等,將 q 位置的元素復制到 p+1 位置上,p 后移一位,q 后移 1 位
重復上述過程,直到 q 等于數組長度。

返回 p + 1,即為新數組長度。

pq
0011122334

java代碼

 public int removeDuplicates(int[] nums) {if(nums == null || nums.length == 0) return 0;int p = 0;int q = 1;while(q < nums.length){if(nums[p] != nums[q]){nums[p + 1] = nums[q];p++;}q++;}return p + 1;
}

golang代碼

func removeDuplicates(nums []int) int {n := len(nums)if n == 0 {return 0}slow := 1for fast := 1;fast < n;fast++ {if nums[fast] != nums[fast-1] {nums[slow] = nums[fast]slow++}}return slow
}

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

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

相關文章

批量創建表空間數據文件(DM8:達夢數據庫)

DM8:達夢數據庫 - - 批量創建表空間數據文件 環境介紹1 批量創建表空間SQL2 達夢數據庫學習使用列表 環境介紹 在某些場景(分區表子表)需要批量創建表空間,給不同的表使用,以下代碼是批量創建表空間的SQL語句; 1 批量創建表空間SQL --創建 24個數據表空間,每個表空間有3個數…

強化學習小筆記 —— 如何選擇合適的更新步長

在強化學習中&#xff0c;動作價值函數的更新可以使用增量法&#xff0c;如下所示&#xff1a; Q k 1 k ∑ i 1 k r i 1 k ( r k ∑ i 1 k ? 1 r i ) 1 k ( r k ( k ? 1 ) Q k ? 1 ) 1 k ( r k k Q k ? 1 ? Q k ? 1 ) Q k ? 1 1 k [ r k ? Q k ? 1 ] \beg…

Linux寶塔面板搭建Discuz論壇, 并內網穿透實現公網訪問

Linux寶塔面板搭建Discuz論壇&#xff0c; 并內網穿透實現公網訪問 文章目錄 Linux寶塔面板搭建Discuz論壇&#xff0c; 并內網穿透實現公網訪問前言1.安裝基礎環境2.一鍵部署Discuz3.安裝cpolar工具4.配置域名訪問Discuz5.固定域名公網地址6.配置Discuz論壇 &#x1f4f7; 江池…

低代碼平臺推薦:五大低代碼廠商誰的模式更“合適”

隨著數字化時代的到來&#xff0c;低代碼開發平臺作為提高數字生產力的工具正受到越來越多企業的關注&#xff0c;市面上的低代碼產品和廠商更是“亂花漸欲迷人眼”。 各家產品不僅功能各有不同&#xff0c;甚至商機都有區別的情況&#xff0c;如何做好產品選型已然成了采購企…

C語言——指針(一)

&#x1f4dd;前言 這篇文章主要帶大家初步認識一下指針&#xff0c;供大家理解參考。 主要歸納與講解&#xff1a; 1&#xff0c;指針與指針變量 2&#xff0c;指針的基本使用&#xff08;如何定義&#xff0c;初始化&#xff0c;引用&#xff09; &#x1f3ac;個人簡介&…

計算方法 期末總結

思維導圖 緒論 算法的性質&#xff1a; 有窮性、確切性、有輸入輸出、可行性 算法的描述方法&#xff1a; 自然語言、偽代碼、流程圖、N-S流程圖 算法設計思想&#xff1a; 化大為小的縮減技術&#xff1a;二分法化難為易的校正技術&#xff1a;開方法化粗為精的松弛技術&a…

無需公網IP,使用內網穿透實現公網訪問本地OpenWRT管理界面

文章目錄 1.openWRT安裝cpolar2.配置遠程訪問地址3.固定公網地址 簡單幾步實現在公網環境下遠程訪問openWRT web 管理界面&#xff0c;使用cpolar內網穿透創建安全隧道映射openWRT web 界面面板443端口&#xff0c;無需公網IP&#xff0c;無需設置路由器。 1.openWRT安裝cpola…

SpringBoot使用ObjectMapper之Long和BigDemical類型的屬性字符串處理,防止前端丟失數值精度

SpringBoot使用ObjectMapper之Long和BigDemical類型的屬性字符串處理&#xff0c;防止前端丟失數值精度! 方式一&#xff1a;注解 使用注解 JsonFormat(shape JsonFormat.Shape.STRING)&#xff0c;如下&#xff1a; import com.fasterxml.jackson.annotation.JsonFormat; …

在arm 64 環境下使用halcon算法

背景&#xff1a; halcon&#xff0c;機器視覺領域神一樣得存在&#xff0c;在windows上&#xff0c;應用得特別多&#xff0c; 但是arm環境下使用得很少。那如何在arm下使用halcon呢。按照官方說明&#xff0c;arm下只提供了運行時環境&#xff0c;并且需要使用價值一萬多人民…

設計高手的秘密武器:5款讓平面作品更出彩的軟件

平面設計是一種迷人而多樣化的藝術形式&#xff0c;它結合了顏色、形狀、排版和創造力&#xff0c;通過圖像和文本傳達信息。市場上有各種各樣的平面設計軟件&#xff0c;選擇合適的設計軟件是成為優秀設計師的重要一步。為了降低軟件成本&#xff0c;大多數設計師會優先使用免…

編譯原理之LL(1)語法分析實驗(附完整C/C++代碼與測試)

一、實驗內容與要求 先從鍵盤讀入要分析的文法&#xff0c;由程序自動構造FIRST、FOLLOW 集以及SELECT集合&#xff0c;判斷是否為LL (1)文法。 分析文法為G[E]&#xff1a; &#xff08;0&#xff09;E→ TE’ &#xff08;1&#xff09;E’→ TE’ &#xff08;2&#xff…

軟件開發王者搭配:80%低代碼+20%高代碼

數字化領域從來不缺新概念&#xff0c;前兩年市場大談云原生、技術中臺、業務中臺等概念&#xff0c;企業更多聚焦在業務與IT架構的升級。而這兩年&#xff0c;隨著低代碼、生成式AI的盛行&#xff0c;大家則開始挖掘數字化應用的低成本建設模式。 在過去&#xff0c;開發一套系…

Linux 是否被過譽了?

Linux 是否被過譽了&#xff1f; 有些人眼里&#xff0c;電腦這種東西就應該是華麗麗的桌面&#xff0c;手握鼠標戳戳按鈕&#xff0c;鍵盤只為偶爾打打字&#xff0c;仿佛windows式的桌面形式才是理所應當&#xff0c;GUI才是理所應當&#xff0c;x86才是理所應當&#xff0c…

使用 NVProf 檢測 CUDA kernel 的 bank conflict

使用 NVProf 檢測 CUDA kernel 的 bank conflict NVProf 指令 使用 NVProf 可以對 bank conflict 進行檢測: nvprof --events shared_ld_bank_conflict,shared_st_bank_conflict <app> [args...]其中: --events 選項指定的 shared_ld_bank_conflict,shared_st_bank_c…

python -opencv 中值濾波 ,均值濾波,高斯濾波實戰

python -opencv 中值濾波 &#xff0c;均值濾波&#xff0c;高斯濾波實戰 cv2.blur-均值濾波 cv2.medianBlur-中值濾波 cv2.GaussianBlur-高斯濾波 直接看代碼吧&#xff0c;代碼很簡單&#xff1a; import copy import math import matplotlib.pyplot as plt import matp…

c++的更嚴格的類型轉換要求

C有更嚴格的類型轉換要求 C中對類型轉換有嚴格的要求&#xff0c;需要的類型和給的類型不 一致時可能會編譯報錯 例如&#xff1a; C語言中 #include<stdio.h> #include<stdlib.h> //全局變量 //C語言中的函數的形參的類型可以不寫&#xff0c;沒有返回值可以返回&…

聯發科正在改寫全球高端手機芯片市場格局

全球高端手機芯片市場正在重塑。 11 月 21 日&#xff0c;聯發科發布了新一代卓越 5G 生成式 AI 移動芯片天璣 8300。 這款定位于中端機檔位的芯片&#xff0c;無論在技術架構還是在實際性能表現上&#xff0c;都實現了對前代旗艦芯片的趕超&#xff0c;徹底打破了業內長期存…

相機和濾鏡應用程序Nevercenter CameraBag Photo mac軟件特點說明

Nevercenter CameraBag Photo mac是一款相機和濾鏡應用程序&#xff0c;它提供了一系列先進的濾鏡、調整工具和預設&#xff0c;可以幫助用戶快速地優化和編輯照片。 Nevercenter CameraBag Photo mac軟件特點 1. 濾鏡&#xff1a;Nevercenter CameraBag Photo提供了超過200種…

復費率電表和預付費電表有哪些區別?

隨著科技的發展和能源管理的日益嚴格&#xff0c;電表技術也在不斷更新換代。復費率電表和預付費電表作為兩種主流的智能電表&#xff0c;各自具有獨特的優勢和應用場景。接下來&#xff0c;小編來為大家詳細解析這兩種電表的區別及其應用場景。 一、復費率電表 1.定義及工作原…

計算機精度導致各種誤差,大數吃小數

如果 p ? p^* p?是p的近似, ∣ p ? ? p ∣ |p^*-p| ∣p??p∣是絕對誤差, ∣ p ? ? p ∣ / ∣ p ∣ |p^*-p|/|p| ∣p??p∣/∣p∣是相對誤差 舍入誤差,就是數據表示精度不足帶來的誤差 a0.1234564≈0.123456fl(a) b0.1234546≈0.123455fl(b) 在上面發生了舍入誤差 f…