Python|每日一练|非内置sort 函数|排序|*运算符| List extend()方法:非降序数组

给定两个非降序整数数组A和B,编写Python函数不使用内置sort将它们合并成一个非降序数组C。通过双指针方法比较A和B的当前元素,将较小的元素添加到结果数组,遍历完一个数组后,将另一个数组的剩余部分添加到结果。
摘要由CSDN通过智能技术生成

题目:非降序数组

题目描述

写一个函数,传入两个非降序的整数数组(A, B),将 A, B 合并成一个非降序数组 C,返回 C(不要使用内置 sort 函数)。(测试用例仅做参考,我们会根据代码质量进行评分)

输入描述:

第一行输入两个整数n,m。(1<=n,m<=100000)分别表示数组A,B的大小。 第二行给出n个整数a(1<=a<=10000) 第三行给出m个整数b(1<=b<=10000)

输出描述:

输出合并之后排序好的数组。

示例 

示例1

输入3 3
1 9 10
3 12 41
复制

输出1 3 9 10 12 41

模板

# 请关闭中文输入法,用英文的字母和标点符号。
# 如果你想运行系统测试用例,请点击【执行代码】按钮,如果你想提交作答结果,请点击【提交】按钮,
# 注意:除答案外,请不要打印其他任何多余的字符,以免影响结果验证
# 本OJ系统是基于 OxCoder 技术开发,网址:www.oxcoder.com
# 模版代码提供基本的输入输出框架,可按个人代码习惯修改


class Solution:
    def __init__(self) -> None:
        pass
    
    def solution(self, n, m, num1, num2):
        result = None

        # TODO: 请在此编写代码
		result = []
i = j = 0
while i<n and j<m:
    if num1[i]<num2[j]:
        result.append(num1[i])
        i += 1
    else:
        result.append(num2[j])
        j += 1
result.extend(num1[i:])
result.extend(num2[j:])
return *result


if __name__ == "__main__":

    
    arr_temp = [int(item) for item in input().strip().split()]
    
    n = int(arr_temp[0])
    m = int(arr_temp[1])
    
    num1 = [int(item) for item in input().strip().split()]
    
    
num2 = [int(item) for item in input().strip().split()]

题解:

参考:Python解题 - CSDN周赛第20期 - 逆波兰 / 后缀表达式_请叫我问哥的博客-CSDN博客

思路与步骤:

1、按给定格式输入数据;

2、指定i,j分别为num1,num2的当前位置指针,

当满足num1[i] < num2[j]加入result后,指针后移1位;

3、num1,num2中任意1个数组遍历完成后跳出循环,并保留指针位置。

4、将剩余未遍历的元素添加入result

5输出list的全部元素

示例代码:

class Solution:
    def __init__(self) -> None:
        pass

    def solution(self, n, m, num1, num2):
        result = None

        # TODO: 请在此编写代码
        result = []

        #i,j分别为num1,num2的当前位置指针,加入result后,指针后移1位,
        i = j = 0
        #num1,num2中任意1个数组遍历完成后跳出循环,并保留指针位置。
        while i < n and j < m:
            if num1[i] < num2[j]:
                result.append(num1[i])
                i += 1
            else:
                result.append(num2[j])
                j += 1
        #将剩余未遍历的元素添加入result
        result.extend(num1[i:])
        result.extend(num2[j:])
        return result

if __name__ == "__main__":
    arr_temp = [int(item) for item in input().strip().split()]

    n = int(arr_temp[0])
    m = int(arr_temp[1])

    num1 = [int(item) for item in input().strip().split()]

    num2 = [int(item) for item in input().strip().split()]

    sol = Solution()
    result = sol.solution(n, m, num1, num2)
    #输出list的全部元素
    print(*result)

PS: Python List extend()方法

引自:https://www.runoob.com/python/att-list-extend.html

描述

extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。

语法

extend()方法语法:

list.extend(seq)

参数

  • seq -- 元素列表。

返回值

该方法没有返回值,但会在已存在的列表中添加新的列表内容。

实例

以下实例展示了 extend()函数的使用方法:

#!/usr/bin/python
aList = [123, 'xyz', 'zara', 'abc', 123];
bList = [2009, 'manni'];
aList.extend(bList)
print "Extended List : ", aList ;

以上实例输出结果如下:

Extended List :  [123, 'xyz', 'zara', 'abc', 123, 2009, 'manni']

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打酱油的工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值