日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【LintCode题集】Q6、Q64

發(fā)布時間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【LintCode题集】Q6、Q64 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  最近開始刷LintCode上的題目,先從標(biāo)簽為容易的開始刷。今天刷的這兩題目差不多為同一類型的題目,都是為按照一定的規(guī)則合并兩個已經(jīng)有序的數(shù)組。

  

[Q6]

描述:

  合并兩個排序的整數(shù)數(shù)組A和B變成一個新的數(shù)組。

  樣例:

  給出A=[1,2,3,4],B=[2,4,5,6],返回?[1,2,2,3,4,4,5,6]

思路:

  題目的方法原型為:

1 public int[] mergeSortedArray(int[] A, int[] B) {}

  所以即從A和B數(shù)組中一次取數(shù)比較大小,將其中較小者放入新的數(shù)組C。

  當(dāng)其中一個數(shù)組已經(jīng)全部取出,則將剩余一個數(shù)組中的數(shù)全部放入數(shù)組C中。

  在歸并排序中,當(dāng)把一個序列分解為若干個子序列之后,正是通過遞歸的合并子序列來完成排序。

實現(xiàn):

?

1 public int[] mergeSortedArray(int[] A, int[] B) { 2 // Write your code here 3 4 int[] C = new int[A.length + B.length]; 5 6 int indexa = 0; //表示a數(shù)組的索引位置 7 int indexb = 0; //表示b數(shù)組的索引位置 8 int indexc = 0; //表示c數(shù)組的索引位置 9 10 //當(dāng)某個數(shù)組已經(jīng)全部合并進新的數(shù)組的時候跳出循環(huán) 11 while( ! ((indexa == A.length) || (indexb == B.length))){ 12 if(A[indexa] <= B[indexb]){ 13 C[indexc ++] = A[indexa ++]; 14 } 15 else{ 16 C[indexc ++] = B[indexb ++]; 17 18 } 19 } 20 //A數(shù)組還有剩余元素 21 while(indexa < A.length){ 22 C[indexc ++] = A[indexa ++]; 23 } 24 //B數(shù)組還有剩余元素 25 while(indexb < B.length){ 26 C[indexc ++] = B[indexb ++]; 27 } 28 29 return C; 30 31 }

?

[Q64]

描述:

  合并兩個排序的整數(shù)數(shù)組A和B變成一個新的數(shù)組。

  你可以假設(shè)A具有足夠的空間(A數(shù)組的大小大于或等于m+n)去添加B中的元素。

  樣例:

  給出 A =?[1, 2, 3, empty, empty], B =?[4, 5]

  合并之后 A 將變成?[1,2,3,4,5]

思路:

  題目的方法原型為:

1 public void mergeSortedArray(int[] A, int m, int[] B, int n) {}

?

  從題目函數(shù)原型和題目描述可以看出,這次在合并的時候是在A數(shù)組的基礎(chǔ)上進行合并,A數(shù)組的大小大于或等于A+B的大小,所以可以將B數(shù)組合并到A數(shù)組中。

  考慮兩種情況:

  1 當(dāng)B中的某個元素已經(jīng)比A中的最后一個元素還要大時,此時不需要再繼續(xù)比較了,直接將B中包括當(dāng)前元素的剩余元素全部插入到A數(shù)組最后。

  2 當(dāng)B中的第x元素通過比較插入到了A數(shù)組的y位置上,則第x + 1 元素直接從y + 1 位置開始繼續(xù)比較,前面的無需比較。

  此題目比上面的題目還要多增加一個步驟,因為是在A數(shù)組上進行插入,所以插入之后,插入位置以后的元素需要往后移動一個位置,涉及到一個移動操作。

實現(xiàn):

1 public void mergeSortedArray(int[] A, int m, int[] B, int n) { 2 int indexa = 0 ; // 標(biāo)識A數(shù)組的遍歷位置 3 int indexb = 0 ; //標(biāo)識B數(shù)組的遍歷位置 4 int lastIndex = m - 1 ; //標(biāo)識A數(shù)組中最后的位置 5 6 while ( (indexa <= lastIndex) && (indexb <= n - 1) ) { 7 if(B[indexb] < A[indexa]){ 8 //這個題目第一此提交出現(xiàn)了錯誤, 錯誤原因是下面的for循環(huán)中應(yīng)該是i -- , 手滑寫成了 i ++ 9 for(int i = lastIndex ; i >= indexa ; i --){ 10 A[i + 1] = A [i] ; 11 } 12 A[indexa ++] = B[indexb ++]; 13 lastIndex ++ ; 14 } 15 else{ 16 indexa ++ ; 17 } 18 } 19 while(indexb <= n - 1 ) { 20 A[++ lastIndex] = B[indexb ++] ; 21 } 22 }

?

總結(jié):

  有關(guān)于數(shù)組的操作,大多可以用過設(shè)置不同變量,來標(biāo)識數(shù)組中的不同位置,從而可以進行不同的操作。

?

轉(zhuǎn)載于:https://www.cnblogs.com/tancky/p/6574747.html

總結(jié)

以上是生活随笔為你收集整理的【LintCode题集】Q6、Q64的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。