面试题14:调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 分析:不能前后指针法,前面的指针找到偶数停下来,后面的指针找到奇数停下来,然后对应元素交换,因为这样会改变奇偶数的相对位置。 方法(1):用两个下标odd,even,even遍历数组,遇到偶数继续往后走,遇到奇数就... 阅读详情

题目:输入一个整数数组,实现一个函数来调整数组中数字的顺序,是得所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。


分析

最简单的办法就是开辟和原数组同样大小的空间,顺次扫描原数组2次,第一次将所有奇数放进新数组中,第二次将偶数放入就可以。这种方法的时间复杂度为O(n),空间复杂度为O(n)。

代码如下:

void ReorderOddEven(vector<int>& arr)
{
    vector<int> newarr;
    int i;
    for(i=0;i<arr.size();++i)
    {
        if(arr[i]&0x1)
        {
            newarr.push_back(arr[i]);
        }
    }
    for(i=0;i<arr.size();++i)
    {
        if(!(arr[i]&0x1))
        {
            newarr.push_back(arr[i]);
        }
    }
    arr.clear();
    arr=newarr;
}

以上算法的优点是不会改变原数据的相对顺序。我们也可以只扫描原数组一次,若为奇数,则从新数组前面开始往后放;若为偶数,则从新数组后面开始往前放。这种方法缺点是会使偶数的相对顺序翻转。代码从略。

一种更好的思路是,受快速排序算法的启发,我们模仿快速排序的partition函数,从原数组的两端向中间扫描,前、后指针分别遇到偶数和奇数就停下来,然后交换他们即可。

代码如下:

void ReorderOddEven(vector<int>& arr)
{
    int i=0,j=arr.size()-1;
    while(i<j)
    {
        while(i<j && (arr[i] & 0x1))
            i++;
        while(i<j && !(arr[j] & 0x1))
            j--;
        swap(arr[i],arr[j]);
    }
}

以上

如果你有任何想法或是可以改进的地方,欢迎和我交流!

完整代码及测试用例在github上:点我前往

【实践指南】Wasserstein距离在电力系统鲁棒优化中的核心应用 本文深入探讨了Wasserstein距离在电力系统分布鲁棒优化中的核心应用。针对风电、光伏出力的不确定性,文章阐述了如何利用Wasserstein距离构建模糊集,将复杂的分布鲁棒优化问题转化为可求解的确定性模型,并提供了从理论到代码实现的完整实践指南,有效平衡了系统运行的经济性与鲁棒性。 阅读详情

相关推荐

基于OSPF技术的某企业网络设计(完整文档+ENSP拓扑图)

主要对网络规划与设计,以企业网络为背景,对某个中型企业网络进行规划设计,该企业总部在南京,在常州有一个分公司,需要实现总部和分公司能够访问外网,能够让分公司内的用户或主机访问总部服务器的资源,并且保证数据的安全性。在这次总部企业网络设计中,考虑到资金的问题,核心层部署2台核心三层交换机,负责转发总部内部用户的流量,并充当内部用户网关,能够实现内部不同网段的用户之间的连通性。对于一些对网络比较敏感的企业或用户,对网络的要求较高,对于网络的稳定性和安全性也有较高的要求。

qq1325513482的博客 2万+

调整数组顺序使奇数位于偶数前面(简单)

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。 示例 输入:nums =[1,2,3,4] 输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。 做题思路 1.设置指针i指向数组首位,指针j指向数组末位 2.i遇到偶数i++,j遇到奇数j--,否则交换i、j所指向的数值 3.返回数组 代码 class Solution { public int[] exchange(i.

zxw20171828的博客 205

ros2笔记-4.6使用launch启动脚本

ros2 4.6 使用launch启动多节点

bohu83的博客 1311

输入一个整数数组,实现一个函数。来调整该数组中数字的顺序使得数组中的所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

【代码】输入一个整数数组,实现一个函数。来调整该数组中数字的顺序使得数组中的所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

SHARK_ddd的博客 505

网格聚类 Grid Clustering/Grid-based Clustering

本文主要简单介绍了网格聚类的基本概念,优缺点,应用场景,建模时的注意事项,评价指标,实现方法,python示例和模型参数等。

JasonH2021的博客 4827

双相机坐标系标定

工业双相机对位标定

sinat_33762356的博客 8317

输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。

【代码】输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。

hy____123的博客 310

camera QXXX架构

This article introduces the QCX camera architecture for Qualcomm’s latest automotive chips including SA8650. It elaborates the layered camera stack under QNX, HGY and HQX systems, covering client applications, stream manager, CamX components and hardware d

qq_39257814的博客 4543

调整数组使奇数全部都位于偶数前面。

输入一个整数数组,实现一个函数, 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, 所有偶数位于数组的后半部分。 在数组中有一组整型数据,调整奇数位于前半部分,偶数位于后半部分。 大致思路:在前半部分如果发现一个偶数,就需要把他换到后面,判断奇偶性用%2来判断,数组前后开始遍历数组,判断前后两个数的奇偶性判断是否需要交换(前偶后奇,需要交换,左边向右走一步,右边向左走一步;前奇后奇...

question_mark的博客 443

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之BswM模块配置详解(上)

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之BswM模块配置详解(上)

weixin_42412049的博客 737

锐明技术Crocus系统 DeviceState.do SQL注入漏洞复现

锐明技术Crocus系统 DeviceState.do 接口存在SQL注入漏洞,经过身份验证的远程攻击者除了可以利用SQL注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。

0xSec 452

剑指offer:面试题14——调整数组顺序使奇数位于偶数前面

剑指offer:面试题14——调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思路:由于不改变相对顺序,可以额外申请空间先存奇数再存偶数O(n) 如果不允许额外申请空间,则可以每次找到偶数都将偶数取出来,并且将当前位置之后的数都向前移动一位...

MereX的博客 346

【SpringBoot 3.x 第43节】你还敢说 Spring 启动慢是“宿命”?Spring AOT 把启动剧本都提前写死了,你服不服?

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。

**My Coding Family** 539

面试题14:调整数组顺序是奇数位于偶数前面

/*面试题14 题目:输入一个整数数组,实现一个函数来调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于 数组的后半部分。 简单的思路是:扫描数组,碰到一个偶数,拿出来,把数组后面的数字向前移动,数组末尾出现一个空位,把这个偶数放 入空位。每碰到一个偶数需要移动O(n)个数字,因而总的时间复杂度是O(n*n)。 思路二:可以维护两个指针,一个指向数组的第一个,向

飘飘摇摇的風 340

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

《剑指Offer》面试题14:调整数组顺序使奇数位于偶数前面

《剑指Offer》面试题14:调整数组顺序使奇数位于偶数前面题目描述    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。解题思路最简单思路    不考虑时间复杂度,最简单的思路是从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位。将拿出的偶数放到数组末尾空位。由于每碰到一个偶数就要挪动...

南方有乔木的博客 1342

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【剑指 Offer 学习】【面试题 14 : 调整数组顺序使奇数位于偶数前面】【思路】

题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。   思路: 插入排序的思想 遍历数组,将遍历的第一个奇数(坐标 i)依次与前一个偶数(坐标 i - 1)对换位置 记录已调整顺序的奇数的个数,后续的遍历,遍历至当前记录值即可   冒泡排序思想待完善   ...

handsome_zan的博客 168

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【剑指Offer学习】【面试题14 :调整数组顺序使奇数位于偶数前面】

https://blog.csdn.net/derrantcm/article/details/46669015 void splitJiOu(int a[], int len) { if (a == NULL || 0 == len || 1 == len) { return; } int sIndex = 0; int eIndex ...

li198847的博客 181

面试题14:调整数组顺序使奇数位于偶数的前面

面试题14:调整数组顺序使奇数位于偶数的前面 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 代码: package offer; import java.util.ArrayList; /** * 面试题14:调整数组顺序使

鲍礼彬的优快云博客 ~_~ 439

剑指Offer名企面试题14:调整数组顺序使奇数位于偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 解题思路是:维护两个指针,一个指向数组第一个元素start,另一个指向数组最后一个元素end,分别相向移动两个指针,当start++指针指向偶数,end--指针指向奇数,并且start<end条件,将他们位置上的数据交换,直到start和end指针产生碰撞,即st...

feinifi的博客 210

【一刷《剑指Offer》】面试题 14:调整数组顺序使奇数位于偶数前面

让 left 往后遍历,直到找到前半部分的第一个偶数,让 right 向前遍历,直到找到后半部分的第一个奇数,然后交换 left 和 right 所在位置的数。左向右遍历,每次遇到的都是最前面的奇数,将该奇数之前的内容(偶数序列)整体后移一个位置,腾出位置后,将奇数保存在它将来该在的位置。:假设现在新增需求,需要保证奇数和奇数,偶数和偶数之间的相对位置不变。,因为我们是从左往右放的,没有跨越奇数,所以一定是相对位置不变的。按照题目意思,其实跟快排的思路一致,我们只需要定义。

Elena's Blog 399

剑指Offer----面试题14:调整数组顺序使奇数位于偶数前面

题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有的偶数位于数组的后半部分。 方法一: 分析:该方法使用的是容器,准确的来讲不属于数组,因此用方法一来做此题很可能不会得分! 源代码: #include #include using std::cout; using std::endl; using

烽火前秦路 603

面试题 14:调整数组顺序使奇数位于偶数前面

一. 题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分.代码请到我的代码库中下载 Point2Offer二. 代码package ween_2; /** * 剑指offer: 调整数组顺序使奇数位于偶数前面 * 方法:两个指针 * 测试用例:功能测试(123456,135246,1,246135,13) * 特殊输入测试(

高筑墙,广积粮,缓称王 345
上一篇: 面试题13:在O(1)时间 内删除链表节点
下一篇: 面试题15:链表中倒数第K个节点
SmartBrave
博客等级 码龄12年 25粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值