zoukankan      html  css  js  c++  java
  • [剑指Offer] 13.调整数组顺序使奇数位于偶数前面

    题目描述

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

    【思路1】用2n的空间换取n的时间复杂度,另外开一个数组,先将奇数存入再将偶数存入

     1 class Solution {
     2 public:
     3     void reOrderArray(vector<int> &array) {
     4         vector<int> res;
     5         for(int i = 0;i < array.size();i ++){
     6             if(array[i] % 2 == 1)
     7                 res.push_back(array[i]);
     8         }
     9         for(int i = 0;i < array.size();i ++){
    10             if(array[i] % 2 == 0)
    11                 res.push_back(array[i]);
    12         }
    13         array = res;
    14     }
    15 };

    【思路2】

    * 1.要想保证原有次序,则只能顺次移动或相邻交换。

    * 2.i从左向右遍历,找到第一个偶数。

    * 3.j从i+1开始向后找,直到找到第一个奇数。

    * 4.将[i,...,j-1]的元素整体后移一位,最后将找到的奇数放入i位置,然后i++。

    * 5.终止条件:j向后遍历查找失败。

     1 class Solution {
     2 public:
     3     void reOrderArray(vector<int> &array) {
     4         int i = 0,j = 0;
     5         int Size = array.size();
     6         while(i < Size) {
     7             //找到第一个偶数
     8             while(i < Size && array[i] % 2 != 0) i ++;
     9             j = i + 1;
    10             //找到第一个奇数
    11             while(j < Size && array[j] % 2 == 0) j ++;
    12             //将奇数插入到偶数前面
    13             if(i < Size && j < Size) {
    14                 int temp = array[j];
    15                 for(int k = j - 1;k >= i;k --) {
    16                     array[k + 1] = array[k];
    17                 }
    18                 array[i] = temp;
    19             }
    20             i ++;
    21         }
    22     }
    23 };
  • 相关阅读:
    python学习第18天----属性、类方法、静态方法
    面试总结
    JAVA面试题整理
    Docker-基础
    Shell
    MYSQL
    logstash的使用(ELK)
    (ELK)FileBeat的使用
    Zookeeper的介绍和单机、集群搭建
    Elaticsearch7.7.0的安装(ELK)
  • 原文地址:https://www.cnblogs.com/lca1826/p/6473954.html
Copyright © 2011-2022 走看看