调整数组顺序使奇数位于偶数前面——剑指 Offer 21

文章目录

      • 题目描述
      • 法一 两次遍历
      • 法二 双指针+一次遍历
      • 法三 原地交换

题目描述

调整数组顺序使奇数位于偶数前面——剑指 Offer 21_第1张图片

法一 两次遍历

在这里插入图片描述

class Solution{
public:
	vectro<int> exchange(vector<int>& nums){
		vector<int> res;
		for(auto & num : nums){
			if(num%2==1){
				res.push_back(num);
			}
		}
		
		for(auto & num:nums){
			if(num%2==0){
				res.push_back(num);
			}
		}
		return res;
	}
}; 

调整数组顺序使奇数位于偶数前面——剑指 Offer 21_第2张图片

法二 双指针+一次遍历

调整数组顺序使奇数位于偶数前面——剑指 Offer 21_第3张图片

class Solution{
public:
	vector<int> exchange(vector<int>& nums){
		int n=nums.size();
		vector<int> res(n);
		int left=0, right=n-1;
		for(auto & num : nums){
			if(num%2==1){
				res[left++]=num;
			} else {
				res[right--]=num;
			}
		}
		return res;
	}
}; 

在这里插入图片描述

法三 原地交换

调整数组顺序使奇数位于偶数前面——剑指 Offer 21_第4张图片

class Solution{
public:
	vector<int> exchange(vector<int>& nums){
		int left=0, right=nums.size()-1;
		while(left<right){
			while(left<right && nums[left]%2==1){    //注意这里是while一直往右走!
				left++;
			}
			while(left<right && nums[right]%2==0){
				right--;
			}
			if(left<right){
				swap(nums[left++], nums[right--]);
			}
		}
		return nums;
	}
}; 

调整数组顺序使奇数位于偶数前面——剑指 Offer 21_第5张图片

你可能感兴趣的:(算法刷题笔记,算法,leetcode,数据结构,c++,职场和发展,链表)