3 - Two Pointers Algorithm
625. Patition Array II
https://www.lintcode.com/problem/partition-array-ii/description?_from=ladder&&fromId=1
类似快速排序排序的思路去分割即可,遇到不满足即交换。
将一个没有经过排序的整数数组划分为 3 部分:
1、第一部分中所有的值都 < low
2、第二部分中所有的值都>= low 并且 <= high
3、第三部分中所有都值都> high
返回任意一种可能的情况。
public void partition2(int[] nums, int low, int high) { // write your code here if(nums == null || nums.length == 0) return; int pl = 0, pr = nums.length - 1; int i= 0; while(i <= pr) { if(nums[i] < low) { swap(nums, i, pl); i++; pl++; } else if(nums[i] > high) { swap(nums, i, pr); pr--; } else { i++; } } } public void swap(int[] nums, int i, int j) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; }