调整数组顺序使奇数位于偶数前面——剑指 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;
	}
}; 
相关推荐
二进制person4 小时前
Java SE--方法的使用
java·开发语言·算法
OneQ6664 小时前
C++讲解---创建日期类
开发语言·c++·算法
JoJo_Way5 小时前
LeetCode三数之和-js题解
javascript·算法·leetcode
.30-06Springfield5 小时前
人工智能概念之七:集成学习思想(Bagging、Boosting、Stacking)
人工智能·算法·机器学习·集成学习
Coding小公仔7 小时前
C++ bitset 模板类
开发语言·c++
凌肖战7 小时前
力扣网C语言编程题:在数组中查找目标值位置之二分查找法
c语言·算法·leetcode
菜鸟看点7 小时前
自定义Cereal XML输出容器节点
c++·qt
weixin_478689767 小时前
十大排序算法汇总
java·算法·排序算法
luofeiju8 小时前
使用LU分解求解线性方程组
线性代数·算法
学不动CV了8 小时前
数据结构---线性表理解(一)
数据结构