面试题21:调整数组顺序使奇数位于偶数前面

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

题目描述

所有奇数位于前半部分,偶数位于后半部分

同leetcode

leetcode

  1. 按奇偶排序数组
    给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。

你可以返回满足此条件的任何数组作为答案。

void sortCore(vector<int>&A, int start, int end)
{
    if(start >= end) return;
    if(A[start] %2 == 1 &&  A[end] %2 == 0)
    {
        int tmp = A[start];
        A[start] = A[end];
        A[end] = tmp;
        sortCore(A, ++start, --end);
    }
    else if(A[start] %2 == 0 &&  A[end] %2 == 0)
    {
        sortCore(A, ++start, end);
    }
    else if(A[start] %2 == 1 &&  A[end] %2 == 1)
    {
        sortCore(A, start, --end);
    }
    else
    {
        sortCore(A, ++start, --end);
    }
    
}


vector<int> sortArrayByParity(vector<int>& A) {
    int a = 0, b = A.size()-1;
    if(A.size()<=1)return A;
    sortCore(A, 0, A.size()-1);
    return A;
    
}

执行用时 : 72 ms, 在Sort Array By Parity的C++提交中击败了40.92% 的用户
内存消耗 : 9.8 MB, 在Sort Array By Parity的C++提交中击败了83.95% 的用户

  1. 按奇偶排序数组 II
    给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。

对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。

你可以返回任何满足上述条件的数组作为答案。

vector<int> sortArrayByParityII(vector<int>& A) {
    if(A.size()<=0) return A;
    int odd =1, even = 0;
    bool oddflag = false, evenflag = false;
    
    
    while(odd<A.size() && even<A.size())
    {
        
        if((A[odd] & 0x01) == 0) oddflag = true;
        else oddflag = false;
        if((A[even] & 0x01) == 1) evenflag = true;
        else evenflag = false;
        
        if(oddflag & evenflag)
        {
            int tmp = A[odd];
            A[odd] = A[even];
            A[even] = tmp;
            odd += 2;
            even += 2;
            oddflag = false;
            evenflag = false;
        }
        else if((!oddflag) & (!evenflag)  )
        {
            odd += 2;
            evenflag += 2;
            
        }
        else if(oddflag)
        {
            even += 2;
        }
        else
        {
            odd += 2;
        }
    }
    
    return A;
}

执行用时 : 196 ms, 在Sort Array By Parity II的C++提交中击败了34.62% 的用户
内存消耗 : 11.9 MB, 在Sort Array By Parity II的C++提交中击败了76.18% 的用户


class Solution {
public:
    vector<int> sortArrayByParityII(vector<int>& A) {
       vector<int> a(A.size());
       int x1=0,x2=1,i;
        for(i=0;i<A.size();i++)
        {
            if(A[i]%2==0){a[x1]=A[i];x1=x1+2;}
            else {a[x2]=A[i];x2=x2+2;}
        }
        return a;
        
    }
};
发布了68 篇原创文章 · 获赞 2 · 访问量 6198

猜你喜欢

转载自blog.csdn.net/qq_30050175/article/details/90312814