给定一个非负整数数组 nums
, nums
中一半整数是 奇数 ,一半整数是 偶数 。
对数组进行排序,以便当 nums[i]
为奇数时,i
也是 奇数 ;当 nums[i]
为偶数时, i
也是 偶数 。
你可以返回 任何满足上述条件的数组作为答案 。
示例 1:
输入:nums = [4,2,5,7] 输出:[4,5,2,7] 解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。示例 2:
输入:nums = [2,3] 输出:[2,3]
题目分析:
给定一个包含一半奇数一半偶数的列表,重新排列奇数索引对应的值必须是奇数,偶数索引对应的偶数值必须是偶数 。
下面使用两种方法,一种是对给定的列表里的值一个一个地进行更换,另一种是将给定列表拆分成两个列表,再重新组合
代码:
第一种:遍历列表,当索引为奇数时,判断对应值如果是奇数则直接索引+1,如果是偶数则在该索引之后的列表里寻找第一个奇数,交换两者位置。当索引为偶数时原理相同,最后返回
class Solution:
def sortArrayByParityII(self, nums: List[int]) -> List[int]:
self.nums = nums
i = 0
while i<len(nums):
if i % 2 != 0:
if nums[i] % 2 == 0:
j = i + 1
while j<len(nums):
if nums[j]%2 !=0:
temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
break
j += 1
if i%2 == 0:
if nums[i] % 2 != 0:
j = i + 1
while j<len(nums):
if nums[j] % 2 ==0:
temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
break
j += 1
i += 1
return nums
第二种:遍历一次列表,将偶数放在一个新列表里,奇数放在一个新列表里,再交替地放入一个新的列表里 (复杂度较低)
class Solution:
def sortArrayByParityII(self, nums: List[int]) -> List[int]:
num1 = []
num2 = []
nums_new = []
for num in nums:
if num % 2 == 0:
num1.append(num)
else:
num2.append(num)
for i in range(len(num1)):
nums_new.extend([num1[i],num2[i]])
return nums_new
涉及内容:
nums_new.extend([num1[i], num2[i]])
这段代码是使用循环遍历两个长度相同的数组 num1 和 num1,并将它们交替地放入一个新的列表 nums_new 中。
具体来说,for i in range(len(num1)):
表示遍历 num1
的索引。在循环的每一次迭代中,num1[i]
和 num2[i]
分别取出当前索引位置上的元素,然后通过nums_new.extend([num1[i], num2[i]])
将它们依次添加到新列表中。
最终得到的 新列表中的元素顺序为:[num1[0], num2[0], num1[1], num2[1], ..., num1[n-1], num2[n-1]]
,其中 n
是数组的长度。