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

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

时间:2023-06-14 22:57:05浏览次数:42  
标签: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/17481561.html

相关文章

  • 【剑指Offer】6、旋转数组的最小数字
    【剑指Offer】6、旋转数组的最小数字题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组......
  • 13个医学图像 AI 入门项目- 都跑完你就超神了!
    本文介绍MONAI框架提供的医学图像方面的教程,基本包括医学图像处理AI方向的各个领域,并且每个教程都是可以跑的通的!可以作为入门的第一项目。主要内容如下文章目录1二维分类2二维分割3三维分类4三维分割4.1ignite版本4.2torch版本4.3BRATS脑肿瘤多标签三维分割4.4CTS......
  • 代码随想录算法训练营第七天| 344.反转字符串 、 541. 反转字符串II、 剑指Offer 05.
     344.反转字符串代码:1voidreverseString(vector<char>&s){23inti=0;4intj=s.size()-1;5while(i<j)6{7charmid=s[i];8s[i]=s[j];9s[j]=mid;1011i++;12......
  • [LeetCode] 1348. Tweet Counts Per Frequency 推文计数
    Asocialmediacompanyistryingtomonitoractivityontheirsitebyanalyzingthenumberoftweetsthatoccurinselectperiodsoftime.Theseperiodscanbepartitionedintosmaller timechunks basedonacertainfrequency(every minute, hour,or day......
  • 【2023-06-13】有个朋友
    20:00我不能决定怎么生,怎么死。但我可以决定怎样爱,怎样活。                                                 ——萧红昨天跟一个旧同事吃饭聊天。没聊久了,我们彼此还......
  • 音视频技术开发周刊 | 134
    架构Peer5与其他ECDN技术如今,公司依靠基于云的视频平台将内容流传输给员工。不幸的是,无论云基础架构有多强大,流质量和并发收视率都受到办公室ISP连接能力的限制,而在大型视频事件中,办公室ISP连接的能力很快就会饱和。当所有员工同时开始观看视频时,根本没有足够的带宽来使用。https:/......
  • 音视频技术开发周刊 | 136
    架构WebRTC之addTransceiver()与addTrack()addTrack()Firefox74加强了附加安全性特性,简化了从MicrosoftEdge的数据导入方式Firefox的WebRTC中不再支持TLS1.0/1.1。https://betanews.com/2020/03/10/firefox-74/使用全参考模型评估WebRTC应用中的视频和音频的QoE(......
  • 深度学习应用篇-元学习[13]:元学习概念、学习期、工作原理、模型分类等
    #深度学习应用篇-元学习[13]:元学习概念、学习期、工作原理、模型分类等1.元学习概述1.1元学习概念元学习(Meta-Learning)通常被理解为“学会学习(Learning-to-Learn)”,指的是在多个学习阶段改进学习算法的过程。在基础学习过程中,内部(或下层/基础)学习算法解决由数据集和......
  • 【剑指Offer】1、二维数组中的查找
    【剑指Offer】1、二维数组中的查找题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:很明显,由于该二维数组上到下......
  • 2023年6月13日,Collections集合工具类,Properties配置文件类,集合使用小结
    1.Properties配置文件类创建配置文件,DBConfig.properties在src目录下username=rootpassword=123456创建test01类packagecom.wz.properties_class;importjava.io.IOException;importjava.util.Properties;publicclasstest01{/***知识点:配置文件类propertie......