7

[leetcode]合并两个有序数组

 2 years ago
source link: https://www.okayjam.com/leetcode%E5%90%88%E5%B9%B6%E4%B8%A4%E4%B8%AA%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

[leetcode]合并两个有序数组

Posted on 2022年6月18日

[leetcode]合并两个有序数组

最近在刷leetcode,从入门开始,把有趣的题放到这里。

给你两个按 非递减顺序 排列的整数数组 nums1nums2,另有两个整数 mn ,分别表示 nums1nums2 中的元素数目。

请你 合并 nums2nums1 中,使合并后的数组同样按 非递减顺序 排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n

示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
解释:需要合并 [1,2,3] 和 [2,5,6] 。
合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。

示例 2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
解释:需要合并 [1] 和 [] 。
合并结果是 [1] 。

示例 3:

输入:nums1 = [0], m = 0, nums2 = [1], n = 1
输出:[1]
解释:需要合并的数组是 [] 和 [1] 。
合并结果是 [1] 。
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。

nums1 有足够的空间容纳两个数组,可以从两个数据的最后的一个数字开始遍历,把大的数字放到num1的里面,遍历完两个数组就可以重新排好序了

func merge(nums1 []int, m int, nums2 []int, n int) {
    if n == 0 {
        return
    }
    i := m - 1
    j := n - 1
    for k := n + m - 1; i >= 0 || j >= 0; k-- {
        if i < 0 {
            nums1[k] = nums2[j]
            j--
        } else if j < 0 {
            nums1[k] = nums1[i]
            i--
        } else if nums1[i] >= nums2[j] {
            nums1[k] = nums1[i]
            i--
        } else {
            nums1[k] = nums2[j]
            j--
        }
    }
}

欢迎关注个人公众号

qrcode_for_gh_360d107cfcf8_344.jpg

This entry was posted in 技术 and tagged leetcode, 技术, 笔记. Bookmark the permalink.

发表评论 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

评论 *

显示名称 *

电子邮箱地址 *

网站地址

在此浏览器中保存我的显示名称、邮箱地址和网站地址,以便下次评论时使用。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK