合并两个有序数组-刷题打卡任务(2)

119 阅读2分钟

“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”

一、题目描述:

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

二、思路分析:

题目要解决的是合并后的数组同样按 非递减顺序 排列。这我们第一步想到的肯定是先将数组合并,然后再进行排序。合并数组不难,那么,剩下的就是非递减顺序排列的问题了,这时候我们就可以用到冒泡排序这个老方法了。

冒泡排序的原理就是比较两个相邻的元素,将值大的元素交换到右边。我们解题的思路就是依次比较相邻的两个数,小的放前面,大的放后面。

主要步骤就是:

第一次比较,先比较第一个和第二个数,将小放前,大放后;再比较第二个数和第三个数...直到比较最后两个数。经过第一次比较,数组中最大的数一定会落在最后面。

然后,我们进行第二轮比较,方法与第一次相同。这时倒数第二个数也是第二大的数。依次类推,我们可以得到一个非递减顺序的排列。

三、AC 代码: 具体实现的代码如下:

def maopaosort(array):
    n = len(array)
    for i in range(n):
        for j in range(0,n-i-1):
            if array[j] > array[j+1]
                array[j],array[j+1] = array[j+1],array[j]

我们放一个数组进去试试执行的效果,array = [4, 3, 5, 1, 2, 11, 9]

image.png

当然题目指的是2个数组要先合并,我们直接用concat函数即可。