牛客網刷題之調整陣列順序使奇數字於偶數前面。

2021-08-30 13:16:50 字數 999 閱讀 9077

我的思路:(很low)

void odevity_swap(int *arr, int size)

int i = 0;

int j = 0;

for(j = 0; j牛客網解題思路:(很高階)

如果是強解的話,就可以從頭掃瞄這個陣列,每碰到乙個偶數時,拿出這個數字,並把位於這個數字後面的所有數字都往前挪動一位,這種解法顯然是o(n^2)的,不用想都知道,這不可能通過測試的。其實,向陣列類的問題,尤其是這種分為兩部分的,我們都可以借鑑快排思想。 

首先,設定前指標指向第乙個數,並且只向後移動; 

然後,.設定第二個指標指向最後乙個數,並且只向前移動; 

最後,在兩個指標相遇之前,第乙個指標總是位於第二個指標的前面。如果第乙個指標指向的數字是偶數,並且第二個指標指向的數字是奇數,我們就交換這兩個數字。

臥槽,測試不能通過!!!原來快排是不穩定的,而此題目要求相對位置不變!!! 

其實,要想保證原有次序,則只能順次移動或相鄰交換。那麼依然設定兩個指標: 

首先,one從左向右遍歷,找到第乙個偶數; 

然後,two從one+1開始向後找,直到找到第乙個奇數; 

接著,將[one....two-1]的元素整體後移一位; 

最後將找到的奇數放入one位置,然後one++。

void odevity_swap1(int *arr, int size)

int one = 0;

int two = 0;

while (one < size)

two = one + 1;

while (two < size && (arr[two] & 0x1) != 1)//查詢偶數後的第一位奇數

if (two < size) //奇偶互換

arr[one++] = temp;

} else //查詢失敗

}for(int i = 0; i}

牛客網刷題 調整陣列順序使奇數字於偶數前面

題目說描述 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。解答 注意到題目要求相對位置不變,這樣的話最好用乙個輔助陣列來做。先遍歷一遍原陣列,記錄奇數的個數,建立乙個新陣列 ...

劍指offer刷題之調整陣列順序使奇數字於偶數前面

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。coding utf 8 fromcollectionsimportdeque classsolution defreorderar...

牛客網刷題之陣列

題目描述 現在有乙個僅包含 x 和 o 的二維板,請捕獲所有的被 x 包圍的區域 捕獲乙個被包圍區域的方法是將被包圍區域中的所有 o 變成 x 例如 x x x x x o o x x x o x x o x x 執行完你給出的函式以後,這個二維板應該變成 x x x x x x x x x x x...