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;
    }

 

posted @ 2019-05-17 07:53  Jenna777  阅读(91)  评论(0编辑  收藏  举报