題目
給你兩個有序整數數組 和 ,請你將 合併到 中,使 成爲一個有序數組。
示例:
輸入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
輸出: [1,2,2,3,5,6]
說明:
- 初始化 和 的元素數量分別爲 和
- 你可以假設 有足夠的空間(空間大小大於或等於 )來保存 中的元素
函數原型
C
的函數原型:
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){}
邊界判斷
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){}
算法設計:雙指針
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int i, j, k;
i = j = k = 0;
int *nums = calloc(nums1Size, sizeof(int));
while( (i < m) && (j < n) ){
if( nums1[i] < nums2[j] )
nums[k++] = nums1[i++];
else
nums[k++] = nums2[j++];
}
while( i < m )
nums[k++] = nums1[i++];
while( j < n )
nums[k++] = nums2[j++];
for(int i=0; i<nums1Size; i++)
nums1[i] = nums[i];
free(nums), nums = NULL;
}
- 時間複雜度:
- 空間複雜度:
算法設計:雙指針
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int i, j, k;
for( i = m-1, j = n-1, k = m+n-1; (i >= 0 && j >= 0); (k--) )
(nums1[i] > nums2[j]) ? (nums1[k] = nums1[i--]) : (nums1[k] = nums2[j--]);
while( j >= 0 )
nums1[k--] = nums2[j--];
}
- 時間複雜度:
- 空間複雜度: