922. 按奇偶排序數(shù)組 II
問(wèn)題
給定一個(gè)非負(fù)整數(shù)數(shù)組 柴淘,
中一半整數(shù)是奇數(shù)迫淹,一半整數(shù)是偶數(shù)。
對(duì)數(shù)組進(jìn)行排序为严,以便當(dāng)為奇數(shù)時(shí)敛熬,
也是奇數(shù);當(dāng)
為偶數(shù)時(shí)第股,
也是偶數(shù)应民。
你可以返回任何滿(mǎn)足上述條件的數(shù)組作為答案。
示例:
輸入:
輸出:
解釋?zhuān)?img class="math-inline" src="https://math.jianshu.com/math?formula=%5B4%2C7%2C2%2C5%5D%EF%BC%8C%5B2%2C5%2C4%2C7%5D%EF%BC%8C%5B2%2C7%2C4%2C5%5D" alt="[4,7,2,5],[2,5,4,7]诲锹,[2,7,4,5]" mathimg="1"> 也會(huì)被接受繁仁。
提示:
2 <= A.length <= 20000
A.length % 2 == 0
0 <= A[i] <= 1000
解法
這道題挺簡(jiǎn)單的。使用兩個(gè)指針?lè)謩e從索引位置與
處前進(jìn)即可辕狰,遇到不滿(mǎn)足條件的地方就停止改备,然后交換兩個(gè)索引的值控漠,一直走下去就行了蔓倍。解法也眾多,不一而足盐捷。姑且寫(xiě)一個(gè)
代碼
java實(shí)現(xiàn)
class Solution {
public int[] sortArrayByParityII(int[] A) {
int i = 0, j = 1;
while (i < A.length - 1 && j < A.length) {
while (i < A.length - 1 && A[i]%2 == 0) {
i += 2;
}
while (j < A.length && A[j]%2 == 1) {
j += 2;
}
//這里需要注意的一點(diǎn)是這個(gè)if的存在偶翅,仔細(xì)觀察對(duì)i的while循環(huán),是可以因?yàn)閕超過(guò)數(shù)組長(zhǎng)度而跳出的碉渡。這里就是為了防止ArrayOutOfBound異常做的處理聚谁。
if (i < A.length - 1) {
int temp = A[i];
A[i] = A[j];
A[j] = temp;
i += 2;
j += 2;
}
}
return A;
}
}