1. 程式人生 > 實用技巧 >leetcode刷題筆記八十八題 合併兩個有序陣列

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
            }
        }
    }
}