python--力扣2149题按符号重排数组

题目:

给你一个下标从 0 开始的整数数组 nums ,数组长度为偶数 ,由数目相等的正整数和负整数组成。

你需要 重排 nums 中的元素,使修改后的数组满足下述条件:

① 任意 连续 的两个整数 符号相反

② 对于符号相同的所有整数,保留 它们在 nums 中的 顺序 。

重排后数组以正整数开头

重排元素满足上述条件后,返回修改后的数组。

例如:

输入:nums = [3,1,-2,-5,2,-4]
输出:[3,-2,1,-5,2,-4]

解题思路:

通过仔细读题,我们可以得出若要满足条件①和③,正数的下标索引要为偶数,负数的下标索引为奇数;若要满足条件②,我们要遍历数组元素,依次把正数放在偶数索引,把负数放在奇数索引。

首先定义一个空数组,用来存放重排后的数组;

然后遍历原来的数组,若元素大于0,依次放到偶数索引位置,若元素小于0,依次放到奇数索引位置;

最后返回重排后数组。

源代码:

def sortofnums(nums):
    l=[]
    i,j=0,1#奇偶位索引
    a=0
    while a<len(nums):
        if nums[a]>0:
            l.insert(i,nums[a])
            i=i+2
        else:
            l.insert(j,nums[a])
            j=j+2
        a=a+1
    return l
nums1=[1,2,3,-1,-2,-3]
nums2=[-1,1]
print('[1,2,3,-1,-2,-3]重排:',sortofnums(nums1))
print('[-1,1]重排:',sortofnums(nums2))

运行结果截图:

本人是python初学者,代码可能有很多不足之处,如果大家有更简洁的算法,欢迎在评论区留言指教!
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值