笔试遇到了个有意思的题目, 使用的是 双指针 的思想, 受到快排思想启发的, 如果您有更好的思路欢迎留言讨论
时间复杂度 : \(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--; } } } }