题目描述

请实现一个函数,功能为合并两个升序数组为一个升序数组

输入描述:

输入有多个测试用例,每个测试用例有1-2行,每行都是以英文逗号分隔从小到大排列的数字

输出描述:

输出一行以英文逗号分隔从小到大排列的数组

示例1

输入

1,5,7,9
2,3,4,6,8,10

输出

1,2,3,4,5,6,7,8,9,10

说明

备注:

不允许使用原生的 sort、concat 等函数

解题思路

将两个有序数组合并为一个数组的过程很简单,再次不赘述。

   while i < len(nums1) and j < len(nums2):
        if nums1[i] < nums2[j]:
            result.append(nums1[i])
            i += 1
        else:
            result.append(nums2[j])
            j += 1

本题的难点在于处理在只有一个输入的情况,本题将input()接收输入换为 sys.stdin.readline(), 这样即使只有一个输入的情况下代码的运行也不会卡住报错,在只有一个输入的情况下直接输出即可:

import sys
i1 = sys.stdin.readline()
i2 = sys.stdin.readline()
if not i1:
    print(i2.strip('\n'))
elif not i2:
    print(i1.strip('\n'))

完整代码 

import sys

def calc(nums1, nums2):
    i = 0
    j = 0
    result = []
    while i < len(nums1) and j < len(nums2):
        if nums1[i] < nums2[j]:
            result.append(nums1[i])
            i += 1
        else:
            result.append(nums2[j])
            j += 1
    if i < len(nums1):
        result += nums1[i:]
    if j < len(nums2):
        result += nums2[j:]
    r = ''
    for i in range(len(result)):
        if i != len(result) - 1:
            r += str(result[i]) + ','
        else:
            r += str(result[i])
    return r

i1 = sys.stdin.readline()
i2 = sys.stdin.readline()
if not i1:
    print(i2.strip('\n'))
elif not i2:
    print(i1.strip('\n'))
else:
    nums1 = list(map(int, i1.strip('\n').split(',')))
    nums2 = list(map(int, i2.strip('\n').split(',')))
    print(calc(nums1, nums2))