[LeetCode No.922]按奇偶排序数组

题目

题解

开始我的思路是通过数组A[i]^i然后取其二进制最后一个数判断是否为1,就知道是否A[i]和i是否奇偶相异。然后从后找与i不相异的A[j]互换。通过for循环到A的倒数第二个元素位置,后面发现不行因为会超时。

所以来看看官方题解
另外貌似判断奇偶只需要对二取余就好= =
解法一:
新建一个同A数组同长的数组B,遍历A数组,是奇数就放进B[1],B[3],B[5].偶数就放进B[0] B[2] B[3]

class Solution {
    public int[] sortArrayByParityII(int[] A) {
        int n = A.length;
        int[] ans = new int[n];

        int i = 0;
        for (int x : A) {
            if (x % 2 == 0) {
                ans[i] = x;
                i += 2;
            }
        }
        i = 1;
        for (int x : A) {
            if (x % 2 == 1) {
                ans[i] = x;
                i += 2;
            }
        }
        return ans;
    }
}

解法二:用i=0,j=1。i每次+2,用来遍历数组偶数下标,如若发现A[i]是奇数,则与A[j]为偶数的互换 ,若A[j]不为偶,则j+=2 继续找直到有A[j]满足互换要求

package LeetCode;

class Solution {
public static int[] sortArrayByParityII(int[] A) {
        int i;
        int j=1;
        int n=A.length;
        for(i=0;i<n;i+=2){
        	if(A[i]%2!=0){
        		while(A[j]%2==1){
        			j+=2;
        		}
        		swap(A,i,j);
        	}
        }
        return A;
    }

public static void swap(int[] A, int i, int j) {
    int temp = A[i];
    A[i] = A[j];
    A[j] = temp;
}


public static void main(String[] args){
	int[] test = {4,2,5,7};
	int[] answer = sortArrayByParityII(test);
	for(int i:answer){
		System.out.print(i+"  ");
	}
}
}
posted @ 2020-11-17 23:10  饼先生  阅读(111)  评论(0编辑  收藏  举报