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

文章目录

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

题目描述

法一 两次遍历

cpp 复制代码
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;
	}
}; 

法二 双指针+一次遍历

cpp 复制代码
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;
	}
}; 

法三 原地交换

cpp 复制代码
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;
	}
}; 
相关推荐
小范馆6 分钟前
C++ 编译方法对比:分步编译 vs 一步到位
java·开发语言·c++
云泽80812 分钟前
C++ 继承进阶:默认成员函数、多继承问题与继承组合选型
开发语言·c++
wen__xvn18 分钟前
算法刷题目录
算法
一颗青果21 分钟前
C++下的atomic | atmoic_flag | 内存顺序
java·开发语言·c++
Tisfy21 分钟前
LeetCode 1292.元素和小于等于阈值的正方形的最大边长:二维前缀和(无需二分)+抽象速懂的描述
算法·leetcode·职场和发展
老了,不知天命25 分钟前
離散數學複習
数据结构·物理·筆記·數學
ZPC821026 分钟前
机械臂urdf
人工智能·算法
郝学胜-神的一滴30 分钟前
Python对象的自省机制:深入探索对象的内心世界
开发语言·python·程序人生·算法
跃渊Yuey36 分钟前
【Linux】Linux进程信号产生和保存
linux·c语言·c++·vscode
期待のcode37 分钟前
浅堆深堆与支配树
java·jvm·算法