給定乙個非負整數陣列a
,返回乙個陣列,在該陣列中,a
的所有偶數元素之後跟著所有奇數元素。
你可以返回滿足此條件的任何陣列作為答案。
示例:
輸入:[3,1,2,4]輸出:[2,4,3,1]輸出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也會被接受。
1 <= a.length <= 5000
0 <= a[i] <= 5000
想法:
如果希望原地排序,可以使用快排,乙個經典的演算法。
演算法:
維護兩個指標 i 和 j,迴圈保證每刻小於 i 的變數都是偶數(也就是 a[k] % 2 == 0 當 k < i),所有大於 j 的都是奇數。
所以, 4 種情況針對 (a[i] % 2, a[j] % 2):
如果是 (0, 1),那麼萬事大吉 i++ 並且 j--。
如果是 (1, 0),那麼交換兩個元素,然後繼續。
如果是 (0, 0),那麼說明 i 位置是正確的,只能 i++。
如果是 (1, 1),那麼說明 j 位置是正確的,只能 j--。
通過這 4 種情況,迴圈不變數得以維護,並且 j-i 不斷變小。最終就可以得到奇偶有序的陣列。
class solution
if (a[i] % 2 == 0) i++;
if (a[j] % 2 == 1) j--;
}return a;
}}
or:
class solution905 else if(a[left]%2==0&&a[right]%2==1)else if(a[left]%2==0&&a[right]%2==0)else
}return a;
}}
905 按奇偶排序陣列
題目 思路分析 這道題是讓我們調整給定的a陣列裡面的元素,把偶數放在前面,奇數放在後面,其實很簡單。1.定義兩個變數l和r,l從陣列第乙個元素開始往後走,r從陣列最後乙個元素開始往左走。2.需要用到迴圈,迴圈繼續條件是l3.兩個變數分別走,有4種情況。3.1.左邊元素是偶數,右邊元素是奇數,剛好符合...
905 按奇偶校驗排序陣列
給定乙個非負整數陣列a,返回乙個由a的所有偶數元素組成的陣列,後面跟a的所有奇數元素。你可以返回滿足此條件的任何陣列作為答案。示例 輸入 3,1,2,4 輸出 2,4,3,1 輸出 4,2,3,1 2,4,1,3 和 4,2,1,3 也會被接受。1 a.length 50000 a i 5000 思...
leetcode 905 按奇偶排序陣列
給定乙個非負整數陣列a,返回乙個由a的所有偶數元素組成的陣列,後面跟a的所有奇數元素。你可以返回滿足此條件的任何陣列作為答案。示例 輸入 3,1,2,4 輸出 2,4,3,1 輸出 4,2,3,1 2,4,1,3 和 4,2,1,3 也會被接受。思路 雙指標法 定義兩個指標,left指標指向陣列的第...