排序4

该博客介绍了一种特殊排序方法,针对包含偶数和奇数的数组,要求奇数位于奇数索引,偶数位于偶数索引。提供了三种不同的实现方式:选择排序变形、分开存储再重组以及利用列表推导式和zip函数。示例和代码详细展示了这些方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。

对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。

你可以返回任何满足上述条件的数组作为答案。

示例:

输入:[4,2,5,7]

输出:[4,5,2,7]

解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。

提示:

2 <= A.length <= 20000

A.length % 2 == 0

0 <= A[i] <= 1000

 

方法1:

思路:选择排序的变形。

定义 i=0 ,j=1;每次循环都加上2

A[i] 是求偶数

A[j]是奇数

代码如下:

class Solution(object):

def sortArrayByParityII(self, A):

"""

:type A: List[int]

:rtype: List[int]

"""

i = 0

j = 1

while i < len(A) and j < len(A):

if A[i] % 2 == 0:

i += 2

else:

A[i],A[j] = A[j],A[i]

j += 2

return A

if __name__ == '__main__':

res = Solution()

rt = res.sortArrayByParityII([4,2,5,7])

print(rt)

方法2:

定义两个空列表

一个放偶数,一个放奇数

然后重新调整A列表。2i放偶数,2i+1放奇数

代码如下:

class Solution(object):

def sortArrayByParityII(self, A):

"""

:type A: List[int]

:rtype: List[int]

"""

B = []

C = []

for i in A:

if i % 2 == 0:

B.append(i)

if i % 2 != 0:

C.append(i)

for i in range(len(B)):

A[i*2] = B[i]

A[i*2+1] = C[i]

return A

if __name__ == '__main__':

res = Solution()

rt = res.sortArrayByParityII([4,2,5,7])

print(rt)

方法三:以内存换时间

思路:

用两个列表推导式,一个放偶数,一个放奇数

定义一个空列表

代码如下:

class Solution:

def sortArrayByParityII(self, A: List[int]) -> List[int]:

B = [i for i in A if i % 2 != 0]

C = [i for i in A if i % 2 == 0]

D = []

for B,C in zip(B,C):

D.append(C)

D.append(B)

return D

if __name__ == '__main__':

res = Solution()

rt = res.sortArrayByParityII([4,2,5,7])

print(rt)

 

用到的知识点:选择排序,列表推导式,zip()函数,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值