【剑指offer - C++/Java】13、调整数组顺序使奇数位于偶数前面
发布日期:2021-07-01 00:06:07
浏览次数:2
分类:技术文章
本文共 1949 字,大约阅读时间需要 6 分钟。
在线题目链接:
文章目录
1 题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
2 题目分析
2.1 方法1
这道题很简单,常规的做法是开一个数组arr,遍历两边原数组,第一遍找到所有的奇数,依次存入arr,第二遍找到所有的偶数,依次存到arr。
注意:如果这道题没有要求奇数和奇数,偶数和偶数之间的相对位置不变,则可以使用前后两个指针向中间遍历,前指针遇到偶数则与后指针的数交换,同理后指针遇到奇数则与前指针的数交换
2.11 Java代码
import java.util.ArrayList;import java.util.List;public class Solution { public void reOrderArray(int [] array) { Listarr = new ArrayList (); for(int i=0;i
2.12 C++代码
class Solution { public: void reOrderArray(vector &array) { vector arr; int size=array.size(); for(int i=0;i
2.2 方法2
实际上,这道题的解法,还可以使用类似于冒泡排序的算法,只不过在这里当我们遇到相邻两个数的前一个数为偶数后一个数为奇数时,就交换两数。(这与冒泡排序中前一个数大于后一个数则交换很相似,所以称为类冒泡法)
这种方法也很好写,直接写两个for循环即可,注意数组不要越界即可
2.21 Java代码
public class Solution { public void reOrderArray(int [] array) { for(int i = 0;i < array.length;i++){ for(int j = 0;j< array.length-i-1;j++){ if(array[j]%2==0&& array[j+1]%2==1){ int t = array[j]; array[j]=array[j+1]; array[j+1]=t; } } } }}
2.22 C++代码
class Solution { public: void reOrderArray(vector &array) { for(int i = 0;i < array.size();i++){ for(int j = 0;j< array.size()-i-1;j++){ if(array[j]%2==0&& array[j+1]%2==1){ int t = array[j]; array[j]=array[j+1]; array[j+1]=t; } } } }};
还可以使用C++STL中的stable_partition函数:
class Solution{ public: static bool cmp(int n){ return ((n & 1) == 1); } void reOrderArray(vector &array){ stable_partition(array.begin(),array.end(),cmp); //把奇数排在前面 }};
3 总结
注意考虑交换后奇数与奇数,偶数与偶数的相对位置保持不变。
探讨学习加:
个人qq:1126137994 个人微信:liu1126137994转载地址:https://lyy-0217.blog.csdn.net/article/details/85109241 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年05月06日 15时24分59秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
关于Spring MVC与前端的交互
2019-04-30
大厂经典面试题:Redis为什么这么快?
2019-04-30
Android之Retrofit基本用法篇
2019-04-30
Netty与网络协议资料整理
2019-04-30
golang实现大数据量文件的排序
2019-04-30
golang中的time包
2019-04-30
2019NOIP D4题 加工领奖
2019-04-30
2021.5.19 JS高级第二天
2019-04-30
SpringBoot内置Tomcat配置参数
2019-04-30
ubuntu 快捷键
2019-04-30
linux 根目录下文件夹分析
2019-04-30
linux 查看分区和文件大小
2019-04-30
Not using PCAP_FRAMES 解释(snort中)
2019-04-30
技术转管理?这些“坑”你要绕道走
2019-04-30
领域驱动设计(DDD)前夜:面向对象思想
2019-04-30
Camera驱动调试小记
2019-04-30
四线触摸屏原理
2019-04-30
C/C++如何返回一个数组/指针
2019-04-30
腾讯AI语音识别API踩坑记录
2019-04-30