笔试题(双指针)

笔试遇到了个有意思的题目, 使用的是 双指针 的思想, 受到快排思想启发的, 如果您有更好的思路欢迎留言讨论

时间复杂度 : \(O(n)\) , 空间复杂度 : \(O(1)\)

import java.util.Arrays;

/*
*   有一个splitArr方法, 传入的参数是一个整型的数组, 得到的结果为将该数组进行左右区分开, 奇数存放到左端, 偶数存放到右端
*    请使用最佳的时间复杂度与空间复杂度实现该功能
* */
public class Test {
    public static void main(String[] args) {
        int[] arr = {-2,-1,0,9,0,4,1,2,3,4,5,6,7,8,9,10};

        System.out.println(Arrays.toString(arr));// [-2, -1, 0, 9, 0, 4, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        splitArr(arr);
        System.out.println(Arrays.toString(arr)); // [9, -1, 7, 9, 5, 3, 1, 2, 4, 4, 0, 6, 0, 8, -2, 10]
    }
    public static void splitArr(int[] arr){
        int i = 0;
        int j = arr.length - 1;
        int temp = arr[0];
        boolean flag = false;
        while (i <= j){
            if (arr[i] % 2 == 0){
                temp = arr[i];
                flag = true;
            }else {
                i++;
                continue;
            }
            while (flag && i<=j){
                if (arr[j] % 2 != 0){
                    arr[i] = arr[j];
                    arr[j] = temp;
                    flag = false;
                    break;
                }
                j--;
            }
        }
    }
}

上一篇:11月15日Java学习


下一篇:11月13日Java学习