自己辛苦練習了一周多的陣列演算法題,終於寫出了最優的解決方案。雖然方法有點笨,沒有別人寫的簡單,但是仍然值得鼓勵。。
給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為乙個有序陣列。
說明:初始化 nums1 和 nums2 的元素數量分別為 m 和 n。
你可以假設 nums1 有足夠的空間(空間大小大於或等於 m + n)來儲存 nums2 中的元素。
示例:輸入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
輸出: [1,2,2,3,5,6]
public static void merge(int nums1, int m, int nums2, int n)
if (nums2 == null || nums2.length == 0)
if (m ==0)
return;
}// 找到第二個陣列應該插入的起始位置 startinset 這個位置開始往後插入陣列2的資料。包好startinset 這個位置
int startinsert = 0;
int nums2min = nums2[0];
while (nums2min >= nums1[startinsert] && startinsert =1 ? m -1 : 0;
int nums2max = nums2[n-1];
if (nums2max > nums1[endinsert]) else
}//需要處理有些時候 startinsert 比 endinsert 還要大的問題 該場景是1,2,3,4,5,0 插入數字3 就會出現
if (endinsert <=startinsert)
/*** 將陣列1裡面比陣列2大的部分 挪到最後
*/for (int i = m-1; i > endinsert; i--)
/*** 從起始插入位置startinsert 到插入完陣列1中最大的數的索引位置之間
* 從後往前,插入n1 n2 中比較大的數字
*/for (int j =m + n -(m > endinsert ? (m- endinsert -1) : 0) -1; j>=startinsert;j--)else
}else }}
}
網上和我一樣快,寫法比我簡單10倍的解法:
public void merge(int nums1, int m, int nums2, int n) else
}// while(n1 >= 0)
while(n2 >= 0)
}
希望自己變成寫下面**的人!提高自己的思維能力,解決問題的獨特的思路的能力。
加油,我想成為演算法工程師,架構師。
兩個有序陣列合併
題目描述 已知陣列a中有m個按公升序排列的元素,陣列b中有n個按降序排列的元素,程式設計將a與b中的所有元素按降序存入陣列c中。輸入輸入有兩行,第一行首先是乙個正整數m,然後是m個整數 第二行首先是乙個正整數n,然後是n個整數,m,n均小於等於1000000。輸出輸出合併後的m n個整數,資料之間用...
LeetCode 陣列 合併兩個有序陣列
給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為乙個有序陣列。說明 初始化 nums1 和 nums2 的元素數量分別為 m 和 n 你可以假設 nums1 有足夠的空間 空間大小大於或等於 m n 來儲存 nums2 中的元素。示例...
演算法 兩個有序陣列合併成乙個有序陣列
兩個有序陣列的合併函式 public static int mergelist int a,int b else 後面連個while迴圈是用來保證兩個陣列比較完之後剩下的乙個陣列裡的元素能順利傳入 while i result k a i while j result k b j return re...