给出一个整数数组 nums 和一个整数 k。划分数组(即移动数组 nums 中的元素),使得:
- 所有小于k的元素移到左边
- 所有大于等于k的元素移到右边
返回数组划分的位置,即数组中第一个位置 i,满足 nums[i] 大于等于 k。
public class Solution { /** * @param nums: The integer array you should partition * @param k: An integer * @return: The index after partition */ public int partitionArray(int[] nums, int k) { // write your code here if (nums == null) { return -1; } int start = 0; int end = nums.length; int[] tmp = new int[nums.length+1]; tmp[0] = k; for (int i = 0; i < nums.length; i++) { tmp[i+1] = nums[i]; } while (start < end) { while (start < end && tmp[end] >= k) { end--; } if (start < end) { tmp[start++] = tmp[end]; } while (start < end && tmp[start] < k) { start++; } if (start < end) { tmp[end--] = tmp[start]; } } return start; } }