剑指offer学习笔记:21.调整数组顺序使奇数位于偶数前面

题目

在这里插入图片描述

解法1

暴力解法

正常的思路就是新建两个列表,然后遍历原列表,将奇数和偶数分别放入新的列表中,再将新列表合并即可。该方法遍历一次,时间复杂度为O(n),空间复杂度也为O(n).

class Solution:
    def exchange(self, nums: List[int]) -> List[int]:
    	list_odd = []
    	list_even = []
    	for inum in nums:
    		if inum % 2 == 1:
    			list_odd.append(inum)
    		else:
    			list_even.append(inum)
    	return list_odd + list_even  #奇数在前

双指针法

如果再原数组直接调整奇数偶数的顺序,那么空间复杂度可以优化到O(1),是用双指针法,一个指针指向列表开头,一个指向末尾。

class Solution:
    def exchange(self, nums: List[int]) -> List[int]:
    	i = 0
    	j = len(nums)-1
    	while i<=j: #循环结束的条件是前指针比后指针大
    		if nums[i] % 2 == 0: #如果前指针对应的数是偶数,则和后指针的数交换
    			nums[i],nums[j] = nums[j],nums[i]
    			j -= 1
    		else: #如果前指针对应的数是奇数,则往后移动。后指针不用动
    			i+=1
    	return nums
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值