leetcode刷题笔记八十八题 合并两个有序数组

leetcode刷题笔记八十八题 合并两个有序数组

源地址:88. 合并两个有序数组

问题描述:

你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

说明:

初始化 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]

/**
本题解法较多,这里采用的是暂不移动nums1中的元素,选择自后向前合并数组
时间复杂度 	O(m+n)
空间复杂度	O(1)
*/
object Solution {
    def merge(nums1: Array[Int], m: Int, nums2: Array[Int], n: Int): Unit = {
        var nums1Pos = m-1
        var nums2Pos = n-1
        for(i <- (0 to m+n-1).reverse){
            if (nums1Pos >= 0 && nums2Pos >= 0){
                if(nums1(nums1Pos) >= nums2(nums2Pos)){
                    nums1(i) = nums1(nums1Pos)
                    nums1Pos -= 1 
                }  
                else{
                    nums1(i) = nums2(nums2Pos)
                    nums2Pos -= 1
                } 
            }
            else if (nums1Pos < 0){
                nums1(i) = nums2(nums2Pos)
                nums2Pos -= 1
            }
        }
    }
}
posted @ 2020-07-28 11:56  ganshuoos  阅读(108)  评论(0编辑  收藏  举报