中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用leetcode 怎么合并有序數組

發布時間:2021-07-20 15:10:10 來源:億速云 閱讀:146 作者:Leah 欄目:編程語言

使用leetcode 怎么合并有序數組,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

§ 0x01 題目

給你兩個有序整數數組 nums1 和 nums2,請你將 nums2 合并到 nums1 中,使 nums1 成為一個有序數組。

初始化 nums1 和 nums2 的元素數量分別為 m 和 n 。你可以假設 nums1 的空間大小等于 m + n,這樣它就有足夠的空間保存來自 nums2 的元素。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/merge-sorted-array
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

§ 0x02 題目分析

好久沒有做過算法題目了。趁清明假期有時間,看陳皓的《極客時間》欄目里推薦刷點leetcode,就來了,剛好是這一道。

這道題是基礎題,合并有序數組這樣的邏輯是很常見的。比如,歸并排序中,最后合并的兩個子數組就是有序數組。 最容易想到的就是冒泡和插入排序,但這樣的實現顯然不是最優的,因為沒有利用到兩個數組是有序的特性。

一開始我的思路不太清晰。就想著從數組的右側開始處理,將兩個數組合并在一起。實現的時候發現有問題。

1  2 5 0 0
3 4

如上面的兩個數組,當處理完5之后,5留下的空位不知道要怎么處理。寫了半天也沒有想出來怎么處理。查了下有一篇文章的實現挺簡單的,不過思路一時間接受不了。https://blog.csdn.net/aka_xyz/article/details/114269364

吃過午飯后,想了下,能否用分治策略呢,仔細一想發現可以。

一開始處理的問題模型為:nums1 m nums2 n。 先比較下nums1和nums2的最大值,也就是最右邊的值。

  1. 如果nums1的比較大,它就是整個結果中的最大值。將這個最大值放到最終數組的最后,也就是nums1[m+n-1]。問題模型變為nums1 m-1 nums2 n

  2. 如果nums1的比較小或者等于。那么就可以把nums2的最大值,放到最終數組折最后。問題模塊變為nums1 m nums2 n-1

一開始沒考慮好極端場景。分治可以自然應對num2中所有值比nums1大的場景,但處理不了num2中所有值都比nums1小的場景。所以要單獨處理。

func merge(nums1 []int, m int, nums2 []int, n int) {
        pos := m + n - 1
        p1 := m - 1
        p2 := n - 1
		// 問題模型由p1 p2 nums1 nums2定義
        for p2 >= 0 && p1 >= 0 {
                if nums1[p1] > nums2[p2] {
                        nums1[pos] = nums1[p1]
                        p1--
                        pos--
                } else {
                        nums1[pos] = nums2[p2]
                        p2--
                        pos--
                }
        }

		// 處理極端場景
        if p1 < 0 && p2 >= 0 {
                for i := 0; i <= p2; i++ {
                        nums1[i] = nums2[i]
                }
        }
}

看完上述內容,你們掌握使用leetcode 怎么合并有序數組的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

卓资县| 颍上县| 伊春市| 上高县| 靖安县| 东乌珠穆沁旗| 扬中市| 高雄市| 合山市| 平舆县| 新竹县| 洛阳市| 安宁市| 司法| 云梦县| 合作市| 元江| 淄博市| 盐城市| 泗水县| 上栗县| 广饶县| 海门市| 林甸县| 平安县| 文山县| 芜湖市| 固安县| 弥渡县| 揭西县| 晋江市| 高雄县| 青海省| 肥东县| 岳普湖县| 鲁山县| 津南区| 米易县| 莱西市| 比如县| 呼和浩特市|