• 剑指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 };
  • 相关阅读:
    学会时刻总结
    JS银行卡号Luhm校验
    来京一年总结
    Linux内核同步机制 第1部分(转)
    Spinlock 简介(转)
    warning: no newline at end of file 解决(转)
    c语言 关键字 extern(转)
    MFC 线程同步(转)
    C语言 全局变量 初始化
    Linux 内核的同步机制,第 2 部分
  • 原文地址:https://www.cnblogs.com/zzw1024/p/11668476.html
Copyright © 2020-2023  润新知