zoukankan      html  css  js  c++  java
  • 剑指offer——23调整数组顺序使奇数位于偶数前面

    题目描述

    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
     
    题解:
      一种是数字的相对位置不变,即1,2,3,4  -》 1,3,2,4 
      这样只能使用额外空间了,牛客题解就是这个
      
     1 class Solution {
     2 public:
     3     void reOrderArray(vector<int> &array) {
     4         if (array.size() < 2)return;
     5         vector<int>eventV;
     6         int oddPot = 0;
     7         for (int i = 0; i < array.size(); ++i)
     8         {
     9             if (array[i] & 0x01 != 0)//奇数
    10             {
    11                 array[oddPot] = array[i];
    12                 ++oddPot;
    13             }
    14             else
    15                 eventV.push_back(array[i]);
    16         }
    17         for (int i = 0; i < eventV.size(); ++i)
    18             array[oddPot++] = eventV[i];
    19     }
    20 };

      另一种优化的方法,就是使用头尾双指针,一旦头指针为偶数,尾指针为奇数,则立即交换,不用任何额外空间,遍历一遍完事,但相对位置会改变

      

     1 class Solution01 {
     2 public:
     3     void reOrderArray(vector<int> &array) {
     4         if (array.size() < 2)return;
     5         int L = 0, R = array.size() - 1;
     6         while (L < R)
     7         {
     8             if (func(array[L]))//是奇数
     9                 ++L;
    10             if (!func(array[R]))//是偶数
    11                 --R;
    12             if (!func(array[L]) && func(array[R]))
    13             {
    14                 swap(array[L], array[R]);
    15                 ++L;
    16                 --R;
    17             }
    18         }
    19     }
    20     bool func(int x)
    21     {
    22         return x & 0x01;
    23     }
    24 };
  • 相关阅读:
    国旗国徽图案标准版本
    Microsoft Office 2013 64位免费完整版(office2013)
    PS的简单抠图教程
    1.5td什么意思
    html img 去除图片之间的缝隙
    PS如何去除图片上的网址
    如何用Photoshop/PS画直线
    实达690KPro参数
    Redis实战篇(一)搭建Redis实例
    Redis性能篇(五)Redis缓冲区
  • 原文地址:https://www.cnblogs.com/zzw1024/p/11668476.html
Copyright © 2011-2022 走看看