test[905]Sort Array By Parity

class Solution {
public:
    vector<int> sortArrayByParity(vector<int>& A) {
        vector<int> B;
        for(int i = 0; i < A.size(); i++){
            if(A[i] % 2 == 0){
                B.push_back(A[i]);
                A[i]=-1;
            } 
        }
        for(int i = 0; i < A.size(); i++){
            if(A[i]==-1)
                continue;
            else
                B.push_back(A[i]);
        }
        return B;
    }
        
};

My Solution

再开一个vector,两次for循环

Better Solution

i表示从前向后第一个不是偶数的下标,j表示从后向前第一个不是奇数的下标;

每次循环交换在vector中以i,j为下标表示的元素。

Attention

(1)c++中 vector内存机制:

-》 capacity(),返回对象缓冲区(vector维护的内存空间)实际申请的空间大小

-》 size(),返回当前对象缓冲区存储数据的个数

-》在调用push_back时,若当前容量已经不能够放入容器(即capacity=size),那么vector会重新申请一块内存把之前的内存里的元素拷贝到新的内存当中,然后把push_back的元素拷贝到新的内存中,最后要析构原有的vector并释放原有的内存。所以说这个过程的效率是极低的,为了避免频繁的分配内存,C++每次申请内存都会增长,例如之前是4,那么重新申请后就是8,以此类推。(不一定成倍增长,和编译器有关。)

static const auto kSpeedUp = []() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    return nullptr;
}();

class Solution {
public:
    vector<int> sortArrayByParity(vector<int>& arr) {
        int i=0,j=arr.size()-1;
        
        while(i<j)
        {
            while(i<j && arr[i]%2==0)
                i++;
            while(i<j && arr[j]%2!=0)
                j--;
            if(i<j)
                swap(arr[i++],arr[j--]);
        }
        return arr;
    }
};
发布了16 篇原创文章 · 获赞 0 · 访问量 3133

猜你喜欢

转载自blog.csdn.net/Calliope1997/article/details/82874867
今日推荐