题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
提示:
1 <= nums.length <= 50000
1 <= nums[i] <= 10000
代码
Python
# 思路:
# 采用双指针求解,左指针向右记录偶数,右指针向左记录奇数,互换即可
# 复杂度:
# O(N)
class Solution:
def exchange(self, nums: List[int]) -> List[int]:
i,j=0,len(nums)-1
while i<j:
while i<j and nums[i]%2==1: i+=1 # 防止i==j
while i<j and nums[j]%2==0: j-=1
nums[i],nums[j]=nums[j],nums[i]
return nums
C++
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
int i=0,j=nums.size()-1;
while (i<j) {
while (i<j&&(nums[i]%2==1)) i++;
while (i<j&&(nums[j]%2==0)) j--;
if (i<j) swap(nums[i],nums[j]);
}
return nums;
}
};