题目描述
请实现一个函数,功能为合并两个升序数组为一个升序数组
输入描述:
输入有多个测试用例,每个测试用例有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))