정수 배열 을 입력 하여 함수 하 나 를 실현 하여 이 배열 의 숫자 순 서 를 조정 합 니 다.

제목 설명: 하나의 정수 배열 을 입력 하여 하나의 함 수 를 실현 하여 이 배열 의 숫자의 순 서 를 조정 하여 모든 홀수 가 배열 의 앞부분 에 있 고 모든 짝수 가 배열 의 후반 부분 에 있 으 며 홀수 와 홀수, 짝수 와 짝수 간 의 상대 위치 가 변 하지 않도록 합 니 다.
문제 풀이 방향: 1. 먼저 홀수 의 개 수 를 통계 합 니 다. 2. 원시 배열 을 편리 하 게 합 니 다. 홀수 라면 배열 array Temp [0, oddNum) 에 순서대로 놓 고 짝수 라면 배열 array Temp [oddNum, array. size) 에 놓 습 니 다. 3. array Temp 에서 당신 이 준 요 소 를 array 에 복사 합 니 다.
public class Solution {

    /**
     *      :O(n)
     *      :O(n)
     *
     * @param array
     */
    public static void reOrderArray(int[] array) {
        //                  ,    
        if (array == null || array.length <= 1) {
            return;
        }
        //           
        int oddNum = 0;
        for (int i = 0; i < array.length; i++) {
            if ((array[i] & 1) == 1) {
                oddNum++;
            }
        }
        //                 ,    
        if (oddNum == 0 || oddNum == array.length) {
            return;
        }
        //           
        int[] arrayTemp = new int[array.length];
        //       ,     ,        arrayTemp [0,oddNum)  ,          arrayTemp [oddNum,array.size)  
        int oddIndex = 0;
        int evenIndex = oddNum;
        for (int i = 0; i < array.length; i++) {
            if ((array[i] & 1) == 1) {
                arrayTemp[oddIndex++] = array[i];
            } else {
                arrayTemp[evenIndex++] = array[i];
            }
        }
        System.arraycopy(arrayTemp, 0, array, 0, array.length);
    }

    public static void main(String[] args) {
        int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        reOrderArray(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}
    /**
     *      :O(n^2)
     *      :O(1)
     *
     * @param array
     */
    public static void reOrderArray_(int[] array) {
        if (array == null || array.length <= 1) {
            return;
        }

        //         ,       
        for (int i = 0; i < array.length; i++) {
            for (int j = array.length - 1; j > i; j--) {
                //    
                if ((array[j] & 1) == 1 && (array[j - 1] & 1) == 0) {
                    int temp = array[j];
                    array[j] = array[j - 1];
                    array[j - 1] = temp;
                }
            }
        }
    }

좋은 웹페이지 즐겨찾기