合併已排序的陣列
數組合並
條件:
- 兩個陣列分別已經升序排列
要求:
- 合併兩個陣列並返回新的已經排序後的陣列
分析該題目,其要求與歸併排序的實現思想相同
歸併排序的演算法中,使用“分治”策略,而這道題的實現邏輯,僅需要用到歸併演算法中的“治”
實現一
fun mergeArray(first: Array<Int>, sec: Array<Int>): Array<Int> {
val temp = Array(first.size + sec.size) { 0 }
var t = 0
var i = 0
var j = 0
// 取較短的陣列作為loop條件
var mid = if (first.size <= sec.size) first.size - 1 else sec.size - 1
while (i <= mid && j <= mid) {
//關鍵的邏輯在於這行
temp[t++] = if (first[i] < sec[j]) first[i++] else sec[j++]
}
// 將first陣列中剩餘的元素追加到temp
while (i <= first.size - 1) {
temp[t++] = first[i++]
}
// 將sec陣列中剩餘的元素追加到temp
while (j <= sec.size - 1) {
temp[t++] = sec[j++]
}
return temp
}
實現二
前面的實現,並未能去除重複的元素,增加題目的要求
- 合併後的陣列,如果包含相同元素,則只保留一個
fun mergeArray(first: Array<Int>, sec: Array<Int>): Array<Int> {
val temp = Array(first .size + sec.size) { 0 }
var t = 0
var i = 0
var j = 0
var k: Int
// 取較短的陣列開始loop
var mid = if (first.size <= sec.size) first.size - 1 else sec.size - 1
while (i <= mid && j <= mid) {
//關鍵的邏輯在於這行
k = if (first[i] < sec[j]) first[i++] else sec[j++]
//過濾重複元素
if (t > 0 && k == temp[t - 1]) continue
temp[t++] = k
}
// 將first陣列中剩餘的元素追加到temp
while (i <= first.size - 1) {
k = first[i++]
if (t > 0 && k == temp[t - 1]) continue
temp[t++] = k
}
// 將sec陣列中剩餘的元素追加到temp
while (j <= sec.size - 1) {
k = sec[j++]
if (t > 0 && k == temp[t - 1]) continue
temp[t++] = k
}
return temp
}
多路合併
以上的數組合並只是兩個陣列,繼續引申出,多個有序陣列進行合併,並去重排序;
相關推薦
merge-sorted-array(合併已排序的陣列)
題目描述 Given two sorted integer arrays A and B, merge B into A as one sorted array. Note: You may assume that A has enough space to hold additio
合併已排序的陣列
數組合並 實現一 實現二 多路合併 數組合並 條件: 兩個陣列分別已經升序排列 要求: 合併兩個陣列並返回新的已經排序後的陣列 分析該題目,其要求與歸併排序的實現思想相同 歸併排序的演算法中,使用“分治”策略,而這道題的實現
已排序陣列二分查詢
劉汝佳 紫書提供方法: //正確答案在[x,y)區間之內,即不會包括y。 //這種方法老是兩個細節搞不順,如下標註 int bsearch(int* a, int x,int y,int test
資料結構演算法題/兩個已排序陣列的交集和並集
兩個已排序陣列的交集和並集 問題: 給你兩個排序的陣列,求兩個陣列的交集。 比如: A = 1 3 4 5 7, B = 2 3 5 8 9, 那麼交集就是 3 5. 思路: 1. 每一次從B陣列中取一值,然後在A數組裡逐個比較,如果有相等的,則儲存。該演算法複雜度為 O(MN).
Median of Two Sorted Arrays 求出兩個已排序陣列的中位數
題目為: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run
演算法5:求兩個已排序陣列的交集和並集
問題描述 求兩個已排序資料的交集和並集,要求時間複雜度為O(m+n). 解題思路 A陣列和B陣列,A陣列大小為m,B陣列大小為n。 1、查詢B陣列的每個成員是否在A陣列中,時間複雜度為O(mn) 2、由於A和B陣列都是有序陣列,使用二分法查詢B陣列
用O(lgn)時間求出兩個已排序陣列的中位數
相關問題: 設 x[1..n]和Y[1..n]為兩個陣列,每個都包含n個已排序的數。給出一個求陣列X和Y中所有2n個元素的中位數的O(lgn)時間的演算法。 思考過程: 開始我想把兩個陣列X與Y放入到一個數組Z中,對Z進行排序,這樣Z的中位數易求。但是有2點
尋找兩個已排序陣列的中位數
給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2 。請找出這兩個有序陣列的中位數。要求演算法的時間複雜度為 O(log (m+n)) 。nums1 = [1, 3] nums2 = [2] 中位數是 2.0nums1 = [1, 2] nums2 = [3
二分查詢-兩已排序陣列中找中位數二題
第一題來自於《演算法導論》第九章習題 9.3-8. 已知兩個已排序陣列X[n], Y[n](假設升序),問在時間O(lgn)內找到全部2n個數中的中位數。 給了提示時間O(lgn),那麼必定使用二分查詢。這道題的“梗”在於如何處理兩個已排序陣列。我們有總共2n個數,偶數,那
6、合併排序陣列 ||
題目要求: 合併兩個排序的整數陣列甲和乙變成一個新的陣列。 樣例給出A = [1,2,3,4],B = [2,4,5,6],返回[1,2,2,3,4,4,5,6] 挑戰你能否優化你的演算法,如果其中一個數組很大而另一個數組很小? 程式碼實現: 使用向量,和其中的
已知陣列 ['a','b','d','a','b','c','b','d'] ,按照出現次數排序後變為['b','a','d'
public function test_test() { $arr = ['a','b','d','a','b','c','b','d']; $res = []; foreach ($arr as $k => $v) { $res[$v] = 1; } var_d
leetcode 將已排序的 陣列/連結串列 轉換為二叉搜尋樹(BST),Python實現
思路:不論是陣列還是連結串列,遞迴地找到他的root(即序列的中點),並返回。 1. 將陣列轉換為二叉樹: # Definition for a binary tree node. # class T
LeetCode 21 Merge Two Sorted Lists(合併兩個已排序的連結串列)(Linked List)
翻譯 合併兩個排好序的連結串列,並返回這個新連結串列。 新連結串列應該由這兩個連結串列的頭部拼接而成。 原文 Merge two sorted linked lists and return it as a new list. The new
【Lintcode】合併排序陣列&& 合併排序陣列 II
題目描述:合併兩個排序的整數陣列A和B變成一個新的陣列。 注意事項 你可以假設A具有足夠的空間(A陣列的大小大於或等於m+n)去新增B中的元素。 樣例:給出 A = [1, 2, 3, empty, empty], B = [4, 5] 合併之後 A 將
LeetCode 23. Merge k Sorted Lists 合併k個已排序的連結串列為一個排序連結串列
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. Example: Input: [ 1->4->5,
LeetCode 23 Merge k Sorted Lists(合併K個已排序連結串列)
翻譯 合併K個已排序的連結串列,並且將其排序並返回。 分析和描述其複雜性。 原文 Merge k sorted linked lists and return it as one sorted list. Analyze and describ
求兩個已排序(升序)等長的整數陣列所有元素的中位數
演算法課的題目,給定兩個整數陣列x[], y[],兩個陣列已被排序(升序),陣列長度都是n,求這2n個數的中位數。 最容易想到的是,新建立以個數組 z[2n],將x[],y[]的所有元素排序放入,然後取中間兩個數,不過當陣列很大時,效率不行啊。<^
LintCode -- 合併排序陣列 II
描述 合併兩個排序的整數陣列A和B變成一個新的陣列。 樣例 給出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6] 挑戰 你能否優化你的演算法,如果其中一個數組很大而另一個數組很小? 原題地址
求兩個已排序的陣列中所有元素的第K大(小)
1.reference 2.解題思路 以下均假設A[0…m-1],B[0…n-1]; 1)O(n) 假設A,B均以降序排列,宣告兩個指標p,q。p指向A[0], q指向B[0]。再來一個count=0,用來表示當前已經到第count大了。然後指標
合併排序陣列(LintCode)
題目來源:LintCode 原題地址:http://www.lintcode.com/zh-cn/problem/merge-sorted-array-ii/ 題目: 合併兩個排序的整數陣列A和B