企鹅厂测开笔试题
程序员文章站
2022-05-21 11:48:47
...
测开笔试题分享
“”"
一个数组里面有混序的正负数,按照以下要求重新排列:
1、按照正负间隔的顺序排列
2、同一个符号的数相对顺序不变
3、若某一个符号的数较多,按原顺序放在最后。
例如输入:
1,2,3,7,9,-5,-3,-4,-7,-8,-11,-3,-2
期望输出:
1,-5,2,-3,3,-4,7,-7,9,-8,-11,-3,-2
“”"
算法:
1) 正负数先分开存储;
2) 没有时间空间复杂度的要求情况下,可以采取最笨的方法,分三种情况讨论。代码实现如下:
def my_sort(arr):
if not isinstance(arr,list):
return None
pos = [x for x in arr if x > 0] # 存储正数
neg = [x for x in arr if x < 0] # 存储负数
new = []
if len(pos) == len(neg):
for i in range(len(pos)):
# 一正一负,交替插入,即可
new.append(pos[i])
new.append(neg[i])
elif len(pos) < len(neg):
for i in range(len(pos)):
new.append(pos[i])
new.append(neg[i])
# 将剩余的负数,追加到新列表的尾部
new.extend(neg[len(pos):])
else:
for i in range(len(neg)):
new.append(pos[i])
new.append(neg[i])
# 将剩余的正数,追加到新列表的尾部
new.extend(pos[len(neg):])
return new
if __name__ == "__main__":
print(my_sort([
1,2,3,7,9,-5,-3,-4,-7,-8,-11,-3,-2]))
print(my_sort([1,2]))
print(my_sort([-10,-20]))
print(my_sort([]))
print(my_sort(1))
上一篇: 用C语言实现队列的顺序存储结构
推荐阅读