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 };
  • 相关阅读:
    Palindrome Partitioning
    Minimum Path Sum
    Maximum Depth of Binary Tree
    Minimum Depth of Binary Tree
    Unique Binary Search Trees II
    Unique Binary Search Trees
    Merge Intervals
    Merge Sorted Array
    Unique Paths II
    C++ Primer Plus 笔记第九章
  • 原文地址:https://www.cnblogs.com/zzw1024/p/11668476.html
Copyright © 2011-2022 走看看