一、題目描述
給你兩個有序整數(shù)數(shù)組nums1
和nums2
,請你將nums2
合并到nums1
中,使nums1
成為一個有序數(shù)組。
初始化nums1
和nums2
的元素數(shù)量分別為 m 和 n 。
你可以假設(shè)nums1
的空間大小等于 m + n,這樣它就有足夠的空間保存來自nums2
的元素。
二、題目解析
設(shè)置兩個索引i
和j
分別指向 nums1 和 nums2 的有效元素的尾部,從它們的尾部開始向前遍歷。
同時設(shè)置索引cur
指向nums1
的最末尾。
在每次遍歷過程中,比較i
和j
指向的元素值大小,把大的元素填充到cur
的位置,填充完畢說明那個元素已經(jīng)放置在它應(yīng)該放置的位置,不需要在管它了,把cur
向前移動,同時把i
或者j
向前移動。
繼續(xù)比較i
和j
指向的元素值大小,把大的元素填充到cur
的位置。
三、參考代碼
classSolution{
publicvoidmerge(int[]nums1,intm,int[]nums2,intn){
//索引從有序數(shù)組nums1有效元素的末端開始
//數(shù)組的下標(biāo)索引從零開始計數(shù)
//索引012
//數(shù)組[1,2,3]
inti=m-1;
//索引從有序數(shù)組nums2的末端開始
intj=n-1;
//從有序數(shù)組nums1最末端的位置開始保存元素
intcur=nums1.length-1;
//通過循環(huán)把num2的元素都移動到num1中
while(j>=0){
//比較num1和num2中當(dāng)前的元素大小
//如果num1中的索引位置為i的元素大于num2中索引位置為j的元素
//為了防止越界i必須是大于等于0
if(i>=0&&nums1[i]>nums2[j]){
//把num1中的索引位置為i的元素復(fù)制到索引為cur的位置
//此時cur的元素已經(jīng)確定下來
nums1[cur]=nums1[i];
//接下來去確定cur前面一個元素應(yīng)該放什么數(shù)字
cur--;
//此時,索引i需要向前移動
i--;
//否則,如果num1中的索引位置為i的元素小于或者等于num2中索引位置為j的元素
}else{
//把num2中的索引位置為j的元素復(fù)制到索引為cur的位置
nums1[cur]=nums2[j];
//接下來去確定cur前面一個元素應(yīng)該放什么數(shù)字
cur--;
//此時,索引j需要向前移動
j--;
}
}
}
}
審核編輯 :李倩
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
原文標(biāo)題:LeetCode 26:刪除有序數(shù)組中的重復(fù)項
文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
相關(guān)推薦
指針數(shù)組和二維數(shù)組有沒有區(qū)別?比如這樣的兩個代碼。 int main(){ char *s1[] = { "hello", "world", "total" }; char s2[][6
發(fā)表于 11-24 11:12
?151次閱讀
C語言數(shù)組應(yīng)用計算機導(dǎo)論A第6講:數(shù)組
發(fā)表于 11-20 15:33
?0次下載
今天我們來揭開Air780E 軟件中 C 語言內(nèi)存數(shù)組的神秘面紗,希望有所收獲。
發(fā)表于 11-17 10:00
?252次閱讀
多場景有序充電作為一項創(chuàng)新的技術(shù)和管理模式,為公交綠色低碳轉(zhuǎn)型提供了有力支持。在未來的發(fā)展中,需要加強技術(shù)創(chuàng)新、標(biāo)準(zhǔn)制定、資金投入和安全管理等方面的工作,推動多場景有序充電技術(shù)的廣泛應(yīng)
發(fā)表于 10-30 08:55
?195次閱讀
在LabVIEW中,將字符串數(shù)組轉(zhuǎn)換為數(shù)值數(shù)組是一項常見的任務(wù),尤其是在處理數(shù)據(jù)采集、信號處理或用戶輸入時。 1. 理解LabVIEW的數(shù)據(jù)類型 在開始之前,了解LabVIEW
發(fā)表于 09-04 17:47
?2344次閱讀
在Ubuntu系統(tǒng)中,刪除的文件可以通過多種方法進(jìn)行恢復(fù)。本文將詳細(xì)介紹Ubuntu系統(tǒng)中刪除文件的恢復(fù)方法,包括使用命令行工具、文件恢復(fù)軟件以及預(yù)防文件丟失的策略。本文將分為以下幾個
發(fā)表于 08-30 15:10
?1446次閱讀
HashMap底層使用數(shù)組+鏈表+紅黑樹的方式實現(xiàn),查詢、插入和刪除的效率都很高。HashMap存儲內(nèi)容基于key-value的鍵值對映射,不能有重復(fù)的key,且一個key只能對應(yīng)一個value。
發(fā)表于 07-10 16:31
?458次閱讀
服務(wù)器存儲數(shù)據(jù)恢復(fù)環(huán)境:
某品牌FlexStorage P5730服務(wù)器存儲,存儲中有一組由24塊硬盤組建的RAID5陣列,包括1塊熱備硬盤。
服務(wù)器存儲故障:
存儲中的2個卷被刪除,刪除之后重建了一個新卷。需要恢復(fù)之
發(fā)表于 06-05 11:03
?661次閱讀
C語言零長度數(shù)組,聽起來可能有點奇怪,因為它沒有分配內(nèi)存空間,無法存儲數(shù)據(jù)。但實際上,零長度數(shù)組在Linux內(nèi)核中隨處可見。 零長度數(shù)組的定義 首先,我們要明白什么是零長度
發(fā)表于 05-11 08:49
?941次閱讀
時序數(shù)據(jù)庫是一種在處理時間序列數(shù)據(jù)方面具有高效和專門化能力的數(shù)據(jù)庫。它主要用于存儲和處理時間序列數(shù)據(jù),比如傳感器數(shù)據(jù)、監(jiān)控數(shù)據(jù)、物聯(lián)網(wǎng)數(shù)據(jù)和日志數(shù)據(jù)等。 時序數(shù)據(jù)庫的特點包括:? 1. 高性能:可以
發(fā)表于 04-26 16:02
?656次閱讀
HashMap底層使用數(shù)組+鏈表+紅黑樹的方式實現(xiàn),查詢、插入和刪除的效率都很高。HashMap存儲內(nèi)容基于key-value的鍵值對映射,不能有重復(fù)的key,且一個key只能對應(yīng)一個value。
發(fā)表于 04-25 22:12
?864次閱讀
如果 CHAR 類型數(shù)組的所有數(shù)組元素都擁有相同的字符串,則不必單獨初始化每個數(shù)組元素。忽略右側(cè)的數(shù)組下標(biāo)。(對于一維數(shù)組下標(biāo),不寫下標(biāo)。)
發(fā)表于 04-18 10:37
?1247次閱讀
如果想從一個關(guān)聯(lián)數(shù)組中隨機選取一個元素,需要逐個訪問它之前的元素,原因是沒辦法能夠直接訪問到第N個元素。上面的程序示范了如何從一個以整數(shù)值作為索引**的關(guān)聯(lián)數(shù)組中隨機選取一個元素。
發(fā)表于 03-21 10:11
?1010次閱讀
數(shù)組和鏈表在內(nèi)存中的區(qū)別 數(shù)組和鏈表的優(yōu)缺點? 數(shù)組和鏈表是常見的數(shù)據(jù)結(jié)構(gòu),用于組織和存儲數(shù)據(jù)。它們在內(nèi)存中的存儲方式以及優(yōu)缺點方面存在一些
發(fā)表于 02-21 11:30
?1037次閱讀
如何創(chuàng)建數(shù)組、添加/刪除元素、訪問數(shù)組元素、遍歷數(shù)組以及使用數(shù)組方法和函數(shù)等等。 首先,我們來看一下如何創(chuàng)建一個
發(fā)表于 01-12 15:11
?551次閱讀
評論