题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
leetcode原题代码
思路:
双指针法
- (双指针)初始状态:left指针最左,right指针最右
- (循环)终止条件:left指针和right指针相遇
- (双指针)变化规则:left指针遇到奇数,右移,直至遇到偶数后停下;right指针遇到偶数,左移,直至遇到计数后停下;left、right指针均停下时,交换指针所指元素,并且left指针继续右移,right指针继续左移
代码:
class Solution:
def exchange(self, nums: List[int]) -> List[int]:
left=0
right=len(nums)-1
while left<right:
if nums[left]%2!=0:#奇数则
left+=1
elif nums[right]%2==0:#偶数则
right-=1
else:
nums[left],nums[right]=nums[right],nums[left]
left+=1
right-=1
return nums
疑问:
下面代码报错,且while循环条件不能为【left!=right】,会报错list index out of range
class Solution:
def exchange(self, nums: List[int]) -> List[int]:
left=0
right=len(nums)-1
while left<right:
if nums[left]%2!=0:#奇数则
left+=1
if nums[right]%2==0:#偶数则
right-=1
nums[left],nums[right]=nums[right],nums[left]
left+=1
right-=1
return nums