首页 > 其他分享 >【剑指Offer】13、调整数组顺序使奇数位于偶数前面

【剑指Offer】13、调整数组顺序使奇数位于偶数前面

时间:2023-06-15 23:12:30浏览次数:47  
标签:even 13 奇数 Offer 偶数 数组 odd 指针

【剑指Offer】13、调整数组顺序使奇数位于偶数前面

题目描述:

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

解题思路:

首先,如果不考虑奇数和奇数,偶数和偶数的相对位置,那么我们有一种双指针解法来求解,类似于快排,维护两个指针,第一个指针指向数组的第一个数字,第二个指针指向数组的最后一个数字。第一个指针向后移,第二个指针向前移,如果第一个指针指向偶数,第二个指针指向的是奇数,则交换着两个数字,接着继续移动直到两指针相遇。

上面的方法看似不错,但是对本题不适用,因为本题有相对位置不变的要求,直接交换会导致相对位置改变。因此,我们采用下面的思路来解决本题。

本题解法:对数组进行遍历,设置两个指针even和odd,even指向当前第一个偶数,odd从这个偶数之后开始查找,找到第一个奇数,此时为了相对位置不变,不能直接交换even和odd,而是将从even到odd-1的元素都依次向后移一个位置,将odd指向的那个奇数放到even的位置。然后再找下一个偶数,重复这一过程,最终就可以将奇数都放到偶数的前面,并且保证了相对位置的不变。

编程实现(Java):

   public void reOrderArray(int [] array) {
        int len=array.length;
        int even=0,odd=0; //当前序列的第一个奇数和第一个偶数
        while(odd<len && even<len){
            while(even<len && array[even]%2!=0) //找到第一个偶数even
                even++;
            odd=even+1;
            //找偶数之后的第一个奇数
            while(odd<len && array[odd]%2==0)
                odd++;
            if(odd>=len)  //注意判断,防止溢出
                break;
            //把奇数取出来,从even到odd-1的元素都向后移
            int temp=array[odd];
            for(int i=odd;i>even;i--)
                array[i]=array[i-1];
            array[even]=temp; //奇数放在原来even的位置
            even++;
        }
    }

标签:even,13,奇数,Offer,偶数,数组,odd,指针
From: https://www.cnblogs.com/bujidao1128/p/17484454.html

相关文章

  • [CF1139D]Steps to One
    Preface不会dp,所以反演(感谢@judgelight)。Solution考虑期望式子:\[\begin{aligned}E(len)&=\sum_iP(len=i)\timesi\\&=\sum_iP(len=i)\sum_{j=1}^i1\\&=\sum_i\sum_{j=1}^iP(len=i)\\&=\sum_j\sum_{i\gej}P(len=i)\\&=\sum_jP(len\ge......
  • Flink1.13.6 部署踩坑记录
    环境  Hadoop集群是Ambari2.7.5的版本   Flink是1.13.6_2.12的版本问题记录  1.缺少jar包报错:ERRORorg.apache.flink.yarn.cli.FlinkYarnSessionCli[]-ErrorwhilerunningtheFlinksession.java.lang.NoClassDefFoundError:com/sun/jerse......
  • 6月13日,OpenAI再给ChatGPT、GPT-4加码,API函数调用上线、上下文长度提高4倍、价格降低
    下面是是openAI官方发给用户的邮件内容: 英文不好需要翻译,之后的内容:    ~~~~~~~~~~可以忽略~~~~~~~~~~~~~发现一个不错的国内chatGPT网站,方便易用。点击直达......
  • wsl编译android13源码并刷入pixel6
    wsl编译环境环境依赖参考编译android10时设置的环境https://www.cnblogs.com/revercc/p/16826591.html,这里注意wsl使用的ext4文件系统,此文件系统区分大小写,而windows由于历史原因使用的是NTFS文件系统,此文件系统默认是不区分大小写的。所以在wsl的共享目录中需要开启区分大小写......
  • CVE-2013-4547
    0x01这个漏洞其实和代码执行没有太大关系,其主要原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。  0x02影响版本:Nginx0.8.41~1.4.3/1.5.0~1.5.7 0x03复现POST/HTTP/1.1Host:1.117.159.190:8080User-Agen......
  • DC-DC电源模块直流隔离升压变换器高压稳压输出50V/110V/130V/150V/220V/250V/300V/500
    HRB系列隔离宽电压输入高电压稳压输出特点●效率高达 80%以上●1*2英寸标准封装●单电压输出●价格低●稳压输出●工作温度:-40℃~+85℃●阻燃封装,满足UL94-V0要求●温度特性好●可直接焊在PCB上应用HRBW2~40W系列模块电源是一种DC-DC升压变换器。该模块电源的输入......
  • Struts1.x系列教程(13):国际化
      对于一个面向全球的Web应用程序,按着不同国家的要求显示相关信息(称为国际化)显得尤为重要。国际化的工作非常复杂和繁琐。因为要翻译很多Web界面,信息格式等。然而,Struts为我们提供了完成国际化工作的更容易的方式。在本文将介绍如何使用Struts来简化国际化的工作。一、处理客户......
  • 服务器该如何处理大数据 45.113.203.x
    当大量设备连接服务器,大量数据上传到服务器,服务器要如何提高处理能力,来处理这些数据,数据源为设备数据。服务器如何处理数据可以由以下几个点考虑:1、排队列处理机制数据涌入服务器,但还是能够区分先后顺序,按照数据传输时序将数据摘要排入队列,然后服务器按队列依次进行处理。2、数据分......
  • TrueNAS CORE 13.0-U5.1 TrueNas存储平台 安装部署设置
    Truenas官网地址:https://www.truenas.com/下载TrueNASCORE13.0-U5.1服务器配置要求:CPU四核心内存8G硬盘按需求一、安装:与FREENAS一样(忽略)二、开始配置配置网卡信息说明开始配置网卡信息即可,因此我们选择第一项:三、浏览器访问TrueNas我们可以Https访问也可http访问......
  • 【剑指Offer】19、顺时针打印矩阵
    【剑指Offer】19、顺时针打印矩阵题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4X4矩阵:12345678910111213141516则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解题思路:由于是按照从外到内的顺序依次打......