21 調整陣列中奇數字於偶數前面

2021-10-03 02:18:03 字數 1257 閱讀 7583

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。

示例:

輸入:nums = [1,2,3,4]

輸出:[1,3,2,4]

注:[3,1,2,4] 也是正確的答案之一。

解法:使用兩個哨兵,乙個指向開頭,乙個指向結尾,當開頭哨兵找到乙個偶數,結尾哨兵找到乙個奇數時交換兩個值,直到兩個哨兵見面。

類似於快速排序的一趟

剛開始想到的是遍歷一遍陣列,每碰到乙個偶數就儲存到另乙個陣列中,碰到奇數往前跟進,沒有上面的方法時間複雜度空間複雜度好。

遇到的問題:更新start和end的時候沒有時刻判斷start < end 這個條件,更新完成以後也忘記了比較導致出錯。

class solution 

while(start < end && nums[end] % 2 == 0)

if(start < end)

}return nums;

}};

補充(增強可擴充套件性):

要考慮靜態成員函式指標非靜態成員函式指標

類成員函式指標普通函式指標的不同。參考部落格

#include #include using namespace std;

#define main21 main

class solution

vectorexchange2(vector& nums)

//將第二個引數改為bool (solution::*func)(int) 時,應該傳入乙個非靜態函式

//下面第二個引數是乙個靜態函式的指標

vectorreorder(vector& nums, bool (*func)(int))

while(start < end && func(nums[end]))

if(start < end)

}return nums;

}};int main21();

solution.exchange2(nums);

for(auto i:nums)

cout

}

21 調整陣列順序使奇數字於偶數前面

輸入一整數陣列,調整陣列中數字的順序,使奇數字於陣列的前半部分,偶數字於陣列的後半部分 兩個指標a,b.a指向開始 b指向結束。向中間移動指標,當a指向偶數,b指向奇數時,交換位置。當 a b時,表示已經結束,得到移動後的陣列 public static void reorder int num i...

21 調整陣列順序使奇數字於偶數前面

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。牛客上的這道題比劍指offer多了乙個條件,就是要保證奇數和奇數,偶數和偶數之間的相對位置不變。最簡單的思路就是新建乙個空間,掃兩遍...

21 調整陣列順序使奇數字於偶數前面

nowcoder 需要保證奇數和奇數,偶數和偶數之間的相對位置不變,這和書本不太一樣。方法一 建立乙個新陣列,時間複雜度 o n 空間複雜度 o n public void reorderarray int nums private boolean iseven int x 方法二 使用冒泡思想,每...