# [88. Merge Sorted Array](https://leetcode.com/problems/merge-sorted-array/description/) ## 题目 Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. **Note**: - The number of elements initialized in nums1 and nums2 are m and n respectively. - You may assume that nums1 has enough space (size that is equal to m + n) to hold additional elements from nums2. **Example**: Input: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3 Output: [1,2,2,3,5,6] **Constraints**: - -10^9 <= nums1[i], nums2[i] <= 10^9 - nums1.length == m + n - nums2.length == n ## 题目大意 合并两个已经有序的数组,结果放在第一个数组中,第一个数组假设空间足够大。要求算法时间复杂度足够低。 ## 解题思路 为了不大量移动元素,就要从2个数组长度之和的最后一个位置开始,依次选取两个数组中大的数,从第一个数组的尾巴开始往头放,只要循环一次以后,就生成了合并以后的数组了。 ## 代码 ```go package leetcode func merge(nums1 []int, m int, nums2 []int, n int) { if m == 0 { copy(nums1, nums2) return } // 这里不需要,因为测试数据考虑到了第一个数组的空间问题 // for index := 0; index < n; index++ { // nums1 = append(nums1, nums2[index]) // } i := m - 1 j := n - 1 k := m + n - 1 // 从后面往前放,只需要循环一次即可 for ; i >= 0 && j >= 0; k-- { if nums1[i] > nums2[j] { nums1[k] = nums1[i] i-- } else { nums1[k] = nums2[j] j-- } } for ; j >= 0; k-- { nums1[k] = nums2[j] j-- } } ```