劍指offer21-調整數組順序使奇數位於偶數前

題目詳情

輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有奇數位於數組的前半部分,所有偶數位於數組的後半部分。
示例:
輸入:nums = [1,2,3,4]
輸出:[1,3,2,4]
注:[3,1,2,4] 也是正確的答案之一。

這裏有兩種解題思路

首尾雙指針

這個思路和快排類似,不詳述了。

class Solution:
    def exchange(self, nums: List[int]) -> List[int]:
        if len(nums)==0:
            return nums
        x=nums[0]
        i=0
        j=len(nums)-1
        while i<j:
            while i<j and nums[j]%2==0:
                j-=1
            nums[i]=nums[j]
            while i<j and nums[i]%2==1:
                i+=1
            nums[j]=nums[i]
        nums[i]=x
        return nums

快慢雙指針

從數組首端開始用兩個指針遍歷,其中慢指針指向下一個奇數應該存放的位置,快指針搜索奇數當前位置。
當快指針找到一個奇數時,快慢指針指向的數值交換,並且慢指針執向下一個位置。
當快指針搜索完數組時整個過程結束。

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var exchange = function(nums) {
    if(nums.length<=1)
        return nums;
    let low=0,fast=0;
    while(fast<nums.length){
        if(nums[fast]%2==1){
            let tmp=nums[low];
            nums[low]=nums[fast];
            nums[fast]=tmp;
            low++;
        }
        fast++;
    }
    return nums;
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章