zoukankan      html  css  js  c++  java
  • [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+"  ");
    	}
    }
    }
    
  • 相关阅读:
    第十三周学习进度条
    冲刺第四天
    第二天冲刺
    第三天冲刺
    第一天冲刺
    课下作业
    第十二周学习进度条
    课下作业
    webp与png、jpg相互转换
    Node疑难解决
  • 原文地址:https://www.cnblogs.com/Mr-BING/p/13997351.html
Copyright © 2011-2022 走看看