题目:
给你一个下标从 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初学者,代码可能有很多不足之处,如果大家有更简洁的算法,欢迎在评论区留言指教!