总结【剑指Offer T21】调整数组顺序使奇数位于偶数前面

调整数组顺序使奇数位于偶数前面

https://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593?tpId=13&tqId=11166&tPage=1&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking

一、开辟新数组法

1.分析:用快慢指针遍历数组,慢指针指向最后一个已调整位置奇数,快指针向后遍历,开辟一个新数组保存遍历过程中的偶数,遇到奇数则将其移动到慢指针的下一个位置。
2.代码

void reOrderArray_1(vector<int> &array) {
    vector<int> temp_even;
    int slow,fast,size=array.size();

    for (slow=-1,fast=0; fast<size; ++fast){
        if (array[fast] & 0x1) //若fast指向奇数,将其移动到指定位置
            array[++slow] = array[fast];
        else 
            temp_even.push_back(array[fast]);
    }

    for (fast=0; fast<temp_even.size(); ++fast)
        array[++slow] = temp_even[fast];
}

3.复杂度
时间复杂度:O(n)
空间复杂度:O(n)

二、不开辟新数组:

1.分析

  1. 用两个下标i,j进行遍历;
  2. 当i走到偶数时停下,并让j从i的后一个元素开始遍历;(若i走到队尾则循环结束)
  3. 若j所指的是偶数则继续前进,j遇到奇数则停下(如果j都没遇到奇数则在队尾停下,结束。)。
  4. 此时j所指的是奇数,i所指的是偶数(i到j-1都是偶数)。
  5. 则可以用临时变量temp保存j对应的值,然后从j-1开始到i,挨个后移一位。
  6. 将temp保存的值插入到i的位置。
    优化:冒泡排序也可以保证相对位置不变,所以用冒泡排序写起来会更方便。

2.代码

    void reOrderArray_2(vector<int> &array) {
        int len = array.size();
        if(len <= 1){ // 数组空或长度为1
            return;
        }

        int i = 0;
        while(i < len){
            int j = i + 1;
            if(array[i]%2 == 0){ // a[i]为偶数,j前进,直到替换
                while(array[j]%2 == 0){ // j为偶数,前进
                    if(j==len-1)// i为偶数,j也为偶数,一直后移到了末尾,证明后面都是偶数
                         return;
                    j++;
                }
                // 此时j为奇数
                int count = j-i;
                int temp = array[i];
                array[i] = array[j];
                while(count>1){
                    array[i+count] = array[i+count-1];//数组后移
                    count--;
                }
                array[i+1] = temp;
            }
            i++;
        }
    }

3.复杂度
时间复杂度:O(n2)
空间复杂度:O(1)

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
12178次浏览 107人参与
# 你的实习产出是真实的还是包装的? #
2117次浏览 43人参与
# MiniMax求职进展汇总 #
24331次浏览 310人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7781次浏览 43人参与
# 简历第一个项目做什么 #
31855次浏览 345人参与
# 重来一次,我还会选择这个专业吗 #
433680次浏览 3926人参与
# 米连集团26产品管培生项目 #
6385次浏览 216人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187363次浏览 1122人参与
# 牛客AI文生图 #
21472次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152600次浏览 888人参与
# 研究所笔面经互助 #
119000次浏览 577人参与
# 简历中的项目经历要怎么写? #
310590次浏览 4230人参与
# AI时代,哪些岗位最容易被淘汰 #
64117次浏览 839人参与
# 面试紧张时你会有什么表现? #
30533次浏览 188人参与
# 你今年的平均薪资是多少? #
213296次浏览 1039人参与
# 你怎么看待AI面试 #
180364次浏览 1268人参与
# 高学历就一定能找到好工作吗? #
64352次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76697次浏览 374人参与
# 我的求职精神状态 #
448246次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363811次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160736次浏览 1114人参与
# 校招笔试 #
471781次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务