https://leetcode.cn/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/
解题思路:双指针法
左指针left从左往右遍历,当遇到一个偶数时停止;右指针left从右往左遍历,当遇到一个奇数时停止;同时交换遇到的奇数和偶数
class Solution {
public int[] exchange(int[] nums) {
int left=0,right=nums.length-1;
while(left<right){
while(left<right&&nums[left]%2==1){
left++;
}
while(left<right&&nums[right]%2==0){
right--;
}
swap(nums,left,right);
}
return nums;
}
public void swap(int[] nums,int i,int j){
int tmp=nums[i];
nums[i]=nums[j];
nums[j]=tmp;
}
}
//O(n)
//O(1)
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
int l=0,r=nums.size()-1;
while(l<r){
while(l<r&&nums[l]%2==1){
l++;
}
while(l<r&&nums[r]%2==0){
r--;
}
swap(nums[l],nums[r]);
}
return nums;
}
};
class Solution:
def exchange(self, nums: List[int]) -> List[int]:
left,right=0,len(nums)-1
while left < right:
while left<right and nums[left]%2==1:
left+=1
while left<right and nums[right]%2==0:
right-=1
nums[left],nums[right]=nums[right],nums[left]
return nums