922. Sort Array By Parity II

问题:

重新排序给定数组,使得下标index和数值A[index]的奇偶性一致。

Example 1:
Input: [4,2,5,7]
Output: [4,5,2,7]
Explanation: [4,7,2,5], [2,5,4,7], [2,7,4,5] would also have been accepted.
 

Note:
2 <= A.length <= 20000
A.length % 2 == 0
0 <= A[i] <= 1000

  

解法:

使用两个游标,o:代表奇数游标,e:代表偶数游标

遍历数组,每次递增2->始终指向奇数(偶数)index

直到A[o]和A[e]二者的奇偶性都不与自身游标一致。则交换二者。

(遍历到其中一个不一致,则停止移动游标,只移动另一个,一直到另一个也不一致)

 

代码参考:

 1 class Solution {
 2 public:
 3     vector<int> sortArrayByParityII(vector<int>& A) {
 4         int o=1, e=0;//o:奇数,e:偶数
 5         while(o<A.size() && e<A.size()){
 6             if(A[e]%2!=0 && A[o]%2!=1){
 7                 swap(A[e], A[o]);
 8                 e+=2;
 9                 o+=2;
10             }else{
11                 if(A[o]%2==1) o+=2;
12                 if(A[e]%2==0) e+=2;
13             }
14         }
15         return A;
16     }
17 };

 

简化代码写法:

1 vector<int> sortArrayByParityII(vector<int>& A) {
2     for (int i = 0, j = 1; i < A.size(); i += 2, j += 2) {
3         while (i < A.size() && A[i] % 2 == 0) i += 2;
4         while (j < A.size() && A[j] % 2 == 1) j += 2;
5         if (i < A.size()) swap(A[i], A[j]);
6     }
7     return A;
8 }

 

posted @ 2020-05-25 15:49  habibah_chang  阅读(112)  评论(0编辑  收藏  举报