欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

企鹅厂测开笔试题

程序员文章站 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))
相关标签: 测试开发笔试题