剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
我的思路是从左到右搜,如果左边有奇数,就从末尾开始找一个偶数交换。
- 假如左边的是一个偶数,从右边末尾开始搜一个奇数
- 如果搜索完毕,会出现两种情况,一种是左右指针相遇,弹出循环。这个时候直接break。说明此索引后数组里面全是偶数。
- 如果是搜索到奇数弹出的,那么交换两者的位置,但是左指针的值需要加一,右指针的值减一。
- 如果从左开始搜的时候,左边的是奇数,那么左指针右移,判断下一个。
class Solution:
def exchange(self, nums: List[int]) -> List[int]:
left, right = 0, len(nums)-1
if right == 0: return nums
# mid = left + right // 2
# a & 1:奇数为1,偶数为0
while left < right:
if not (nums[left] & 1):#左边为偶数
while left < right and not (nums[right] & 1):#右边找一个奇数
right -= 1
if nums[right] & 1:#判断这个数如果是奇数则交换,否则弹出,没有奇数交换
nums[left], nums[right] = nums[right], nums[left]
else:
break
left += 1
return nums
还是看看大佬的思路把:
class Solution:
def exchange(self, nums: List[int]) -> List[int]:
i= 0
for j in range(len(nums)):
if nums[j]%2 == 1:
nums[i],nums[j] = nums[j],nums[i]
i+=1
return nums
作者:JamLeon
链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/solution/si-lu-jian-dan-yi-ci-xun-huan-xing-neng-jie-jin-10/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。