905. 按奇偶排序数组 - 力扣

embedded/2024/10/19 5:28:50/

1. 题目

给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。

返回满足此条件的 任一数组 作为答案。

2. 示例

3. 分析

开辟一个数组res用来保存操作过后的元素。第一次遍历数组只插入偶数,第二次遍历数组只插入奇数。

class Solution {
public:vector<int> sortArrayByParity(vector<int>& nums) {vector<int> res;for (int i = 0; i < nums.size(); i++) {if (num % 2 == 0) res.push_back(num[i]);}for (int i = 0; i < nums.size(); i++){if (num % 2 == 1) res.push_back(num[i]);}return res;}
};

能不能只遍历一次数组?可以滴。遇到偶数,替换到res数组偶数区间,即左侧区间;遇到奇数,替换到res数组奇数区间,即右侧区间。

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

前面两种方法都需新开辟一个数组,那能不能不开辟而是原地进行替换?那是可以滴。

定义两个指针,左指针跳过偶数寻找奇数,右指针跳过奇数寻找偶数,交换左右指针元素。

class Solution {
public:vector<int> sortArrayByParity(vector<int>& nums) {int n = nums.size();int left = 0, right = n - 1;while(left < right){while(left < right && nums[left] % 2 == 0) left++;while(left < right && nums[right] % 2 == 1) right--;swap(nums[left++], nums[right--]);}return nums;}
};

或者只用一个指针 j 用来表示元素为奇数。遍历数组寻找到偶数后,交换二者元素即可。思想上感觉都差不多=.= ,只是更简洁~~~

class Solution {
public:vector<int> sortArrayByParity(vector<int>& nums) {int n = nums.size();int j = 0;for(int i = 0; i < n; i++){if(nums[i] % 2 == 0) swap(nums[i], nums[j++]);}return nums;}
};

http://www.ppmy.cn/embedded/43673.html

相关文章

flutter性能优化-UI重绘

在Flutter中&#xff0c;可以采取以下几种方法来减少UI的重绘&#xff1a; 使用setState()方法进行批量更新&#xff1a;当需要更新多个UI元素时&#xff0c;可以使用setState()方法进行批量更新&#xff0c;而不是在每次更新时都调用setState()。这样可以减少重绘的次数&#…

有哪些藏文翻译器在线翻译?工具分享

有哪些藏文翻译器在线翻译&#xff1f;随着全球化的推进&#xff0c;语言之间的交流变得越来越重要。藏语作为中华民族的重要语言之一&#xff0c;其翻译需求也日益增加。为了满足这一需求&#xff0c;市场上涌现出了多款藏文翻译器在线翻译工具&#xff0c;它们以其高效、准确…

Ingress controller:Kubernetes 的瑞士军刀

原文作者&#xff1a;Brian Ehlert of F5 原文链接&#xff1a;Ingress controller&#xff1a;Kubernetes 的瑞士军刀 转载来源&#xff1a;NGINX 中文官网 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.cn 许多人认为 Ingress controller&#xff08;Ingress 控制器&…

SpringBoot 微服务中怎么获取用户信息 token

SpringBoot 微服务中怎么获取用户信息 token 当我们写了一个A接口&#xff0c;这个接口需要调用B接口&#xff0c;但是B接口需要包含请求头内容&#xff0c;比如需要用户信息、用户id等内容&#xff0c;由于不在同一个线程中&#xff0c;使用ThreadLocal去获取数据是无法获取的…

Git常用命令操作

删除git记录,删除项目根目录下的隐藏文件夹.git/ rm -rf .git 初始化仓库 git init 添加到缓冲区 git add controller/* 提交缓冲区文件 git commit -m "新增接口" 拉取远程仓库的 master分支最新代码&#xff0c;并合并到当前所在的分支中 git pull origin…

智慧仓储新动力:EasyCVR+AI视频智能监管系统方案助力仓储安全高效管理

一、背景 随着物流行业的快速发展和智能化水平的提升&#xff0c;智慧仓储视频智能监管系统已成为现代仓储管理的重要组成部分。本系统通过综合运用物联网、视频分析、边缘计算等技术手段&#xff0c;实现对仓储环境的全面监控、智能分析和高效管理。 TSINGSEE青犀视频汇聚Ea…

STM32 定时器问题

stm32通用定时器中断问题 STM32 定时器有时一开启就进中断的问题 ///

抄表:现代生活中的数据采集关键

1.界定与发源 抄表&#xff0c;简单的说&#xff0c;指从各种各样计量机器设备(如智能水表、电度表、天然气表等)载入做好记录使用量的全过程。这一概念自工业化时代至今就出现了&#xff0c;最初由人工进行&#xff0c;伴随着科技创新&#xff0c;如今已经演化出自动化和远程…