題目詳情
輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有奇數位於數組的前半部分,所有偶數位於數組的後半部分。
示例:
輸入: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;
};