劍指 offer21

一拳一個哇哦怪發表於2020-12-24

劍指 Offer 21. 調整陣列順序使奇數位於偶數前面

  1. 雙指標

    設定雙指標,left 指向 陣列的開始,right 指向陣列末尾位置。

    • 對於 left,從前往後找,找到第一個偶數的位置;
    • 對於 right,從後往前找,找到第一個奇數的位置;

    當 left<right時,交換這兩個位置的元素,再繼續進行。

    vector<int> exchange(vector<int>& nums) {
        int left=0,right=nums.size()-1;
        while(left<right)
        {
            while((nums[left]&1)!=0&&left<right){
                left++;
            }
            while((nums[right]&1)!=1&&left<right)
            {
                right--;
            }
            if(left<right)
                swap(nums[left++],nums[right--]);
        }
        return nums;
        }
    
  2. 快慢指標

    設定快指標 fast,慢指標low。fast 記錄的是奇數出現的位置,low 記錄的是奇數應該放置的位置。low 和 fast 都從陣列的開始位置向後移動。直到 fast 指標到達陣列末尾。

    vector<int> exchange(vector<int>& nums) {
            int low=0,fast=0;
            while(fast<nums.size())
            {
                if(nums[fast]&1){
                    swap(nums[low],nums[fast]);
                    low++;
                }
                fast++;
            }
            return nums;
        }
    

相關文章