12.调整数组顺序,使得奇数在前,偶数在后

简介: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。


解法1:创建一个新数组保存偶数 ;删除原数组中对应的偶数位置;新数组放在原数组的后面


class Solution{

public:

   void reOrderArray(vector<int> &array) {

      // 分两步操作:1、从原数组取数 放入新的数组 ,由于vector 具有可调的大小 故删除了数组就会压缩

       //2、从从新数组压栈进入老数组

       vector<int> array_temp;//创建一个新的数组

       vector<int>::iterator ib1, ie1;//迭代器相当于 衔接容器和算法 可以访问里面的元素

      //https://www.cnblogs.com/yuehouse/p/10085127.html

       // vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所要放入的元素

       ib1 = array.begin();

       for (; ib1 != array.end();){            //遇见偶数,就保存到新数组,同时从原数组中删除

           if (*ib1 % 2 == 0) {

               array_temp.push_back(*ib1);

               ib1 = array.erase(ib1);

           }//删除后后面的数自动往前面移动,否则无法解释

           else//如果不是偶数则该地址加1

           {

               ib1++;

           }

       }

       vector<int>::iterator ib2, ie2;

       ib2 = array_temp.begin();

       ie2 = array_temp.end();

       for (; ib2 != ie2; ib2++)             //将新数组的数添加到老数组

       {

           array.push_back(*ib2);

       }

   }

};

解法2:奇数和偶数的位置互换,前后互换即可


冒泡法


class Solution {

public:

   void reOrderArray(vector<int> &array) {

       for (int i = 0; i < array.size();i++)

       {

           for (int j = array.size() - 1; j>i;j--)

           {

               if (array[j] % 2 == 1 && array[j - 1]%2 == 0) //前偶后奇交换

               {

                   swap(array[j], array[j-1]);

               }

           }

       }

   }

};


目录
相关文章
|
消息中间件 分布式计算 Hadoop
Kafka安装部署
Kafka安装部署
304 1
|
测试技术 程序员 C++
iOS:项目中无用类检测和无用图片检测汇总
在涉及到项目大改版,或者涉及到某个功能模块大变更,就会涉及到图片废弃和文件废弃的情况。 但是这时候就会遗留下一个很大的问题,没有将废弃的、无用的文件类或资源删除干净。而这次需要对工程代码的无用资源和无用文件进行删除处理,感触颇多,故在此笔记。 首先,感觉很多人的代码习惯还是恶待提高。比如我发现一些人的代码操作习惯,从好到次,可以大略分以下情况
1502 0
iOS:项目中无用类检测和无用图片检测汇总
|
9月前
|
机器学习/深度学习 人工智能 算法
《C++与 SIMD 指令集:人工智能算法优化新动力》
在AI快速发展的今天,C++结合SIMD指令集成为优化算法性能的关键。SIMD通过并行处理多个数据,显著提升向量和矩阵运算速度,尤其在深度学习中表现突出。优化数据布局与算法设计,不仅提高计算效率,还降低能耗,但需注意代码的可读性和跨平台兼容性。随着技术进步,SIMD在C++中的应用将更加广泛,助力AI技术的发展。
190 12
|
12月前
|
Java
java数据结构,双向链表的实现
文章介绍了双向链表的实现,包括数据结构定义、插入和删除操作的代码实现,以及双向链表的其他操作方法,并提供了完整的Java代码实现。
java数据结构,双向链表的实现
|
机器学习/深度学习 人工智能 安全
算子开发到推理加速,一位00后开发者的“升级打怪”之旅
郑辉,从大四学生到资深AI开发者,他的成长轨迹映射了中国AI生态的繁荣。他独立开发的NonZero算子被纳入CANN主线,参与的深度学习框架降低了大模型训练门槛。在昇腾AI生态中,郑辉们正助力大模型发展。从初次接触分布式机器学习到优化算子,再到参与大模型推理加速项目,郑辉在实践中不断成长,他的工作有望帮助开发者更高效地部署在线推理服务。他的故事展示了开发者如何通过团队合作和持续学习,克服挑战,推动AI在各行业的应用,照亮智能化之路。
232 0
|
12月前
|
算法 Java 关系型数据库
Java中到底有哪些锁
【9月更文挑战第24天】在Java中,锁主要分为乐观锁与悲观锁、自旋锁与自适应自旋锁、公平锁与非公平锁、可重入锁以及独享锁与共享锁。乐观锁适用于读多写少场景,通过版本号或CAS算法实现;悲观锁适用于写多读少场景,通过加锁保证数据一致性。自旋锁与自适应自旋锁通过循环等待减少线程挂起和恢复的开销,适用于锁持有时间短的场景。公平锁按请求顺序获取锁,适合等待敏感场景;非公平锁性能更高,适合频繁加解锁场景。可重入锁支持同一线程多次获取,避免死锁;独享锁与共享锁分别用于独占和并发读场景。
291 3
|
存储 缓存 算法
Elasticsearch 集群节点间的通信
【8月更文挑战第25天】
198 6
|
机器学习/深度学习 算法 计算机视觉
【YOLOv8改进-损失函数】SlideLoss损失函数,解决样本不平衡问题
YOLO-FaceV2是基于YOLOv5的实时人脸检测模型,采用RFE模块增强小人脸检测,NWD损失处理定位偏差,SEAM注意力模块应对遮挡,Slide Loss解决样本不平衡,提升对难样本的关注。在WiderFace数据集上超越YOLO系列。论文和代码已公开。Slide Loss通过IoU加权,优化边界样本,提高模型性能。
|
缓存 NoSQL Redis
Python与Redis:提升性能,确保可靠性,掌握最佳实践
Python与Redis:提升性能,确保可靠性,掌握最佳实践
286 1
|
开发工具 git
git fatal: 拒绝合并无关的历史
记录一个git的错误, 以备以后查看
815 0