我的思路:(很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...