调整数组顺序使奇数位于偶数前面——剑指 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;
	}
}; 
相关推荐
听*雨声4 分钟前
09_软考_数据结构
数据结构
dragoooon347 分钟前
[hot100 NO.31~36]
数据结构·算法·排序算法
白兰地空瓶7 分钟前
JavaScript 列表转树(List to Tree)详解:前端面试中如何从递归 O(n²) 优化到一次遍历 O(n)
javascript·算法·面试
思成不止于此10 分钟前
C++ STL中map与set的底层实现原理深度解析
开发语言·c++·set·map·红黑树·底层实现
艾醒10 分钟前
大模型原理剖析——从技术特性、底层架构到落地逻辑的全维度解析
算法
惺忪979812 分钟前
C++ 构造函数完全指南
开发语言·c++
小此方14 分钟前
Re:从零开始学C++(五)类和对象·第二篇:构造函数与析构函数
开发语言·c++
烤盘饭大王14 分钟前
数据结构(四)图结构
数据结构
秦苒&15 分钟前
【C语言】详解数据类型和变量(二):三种操作符(算数、赋值、单目)及printf
c语言·开发语言·c++·c#
无限进步_15 分钟前
【C语言&数据结构】有效的括号:栈数据结构的经典应用
c语言·开发语言·数据结构·c++·git·github·visual studio