leetcode 75. 顏色分類
阿新 • • 發佈:2020-08-01
題目描述
我的題解
方法:三路快排
思路分析
- 三路快排的應用+變形一下
- 因為本題最多隻有3個數,所以令 v 為2,只進行一次三路快排呼叫即可
- 下面先給出三路快排的原模版。再給出我本題的程式碼
// 三項切分的快速排序 private static void quick3way(int[] a, int lo, int hi) { if(hi <= lo) return; int lt = lo, i = lo+1, gt = hi; int v = a[lo]; while(i <= gt) { if(a[i] < v) { int tmp = a[i]; a[i++] = a[lt]; a[lt++] = tmp; } else if(a[i] > v) { int tmp = a[i]; a[i] = a[gt]; a[gt--] = tmp; } else i++; } quick3way(a, lo, lt-1); quick3way(a, gt+1, hi); }
我本題的程式碼如下
public void sortColors(int[] nums) { if (nums == null)return; quick3way(nums,0,nums.length-1); // System.out.println(Arrays.toString(nums)); } private void quick3way(int[] nums, int lo, int hi) { if (hi<=lo) return ; int lt=lo; int gt = hi; int i=lo; int v = 1; while (i <= gt) { if (nums[i] < v) { if (i == lt) { lt++; i++; } else { int tmp = nums[i]; nums[i] = nums[lt]; nums[lt++] = tmp; } } else if (nums[i] > v) { int tmp = nums[i]; nums[i] = nums[gt]; nums[gt--] = tmp; } else i++; } }