MENU

LeetCode75. 颜色分类

August 7, 2018 • Read: 3328 • LeetCode阅读设置

题目链接:LeetCode75展开目录

题解展开目录

这道题两种做法,一种是用计数排序,因为告诉了你只有 3 种数字,所以直接创建一个长度为 3 的数组 arr,然后遍历一遍原数组,每出现一次某个数,arr 对应位置的值就加加。最后依次输出 arr 即可

代码展开目录
  • class Solution {
  • public void sortColors(int[] nums) {
  • int[] arr = new int[3];
  • for(int i = 0;i < nums.length;i++)
  • arr[nums[i]]++;
  • for(int i = 0,j = 0;i < 3;i++) {
  • while((arr[i]--) != 0)
  • nums[j++] = i;
  • }
  • }
  • }

还有一种方法,就是类似于快排的思想,将所有小于 1 的放左边,大于 1 的放右边

代码展开目录
  • class Solution {
  • public void sortColors(int[] nums) {
  • int l = 0;
  • int r = nums.length - 1;
  • int cur = 0;
  • while(cur <= r) {
  • if(1 < nums[cur])
  • swap(nums,cur,r--);
  • else if(1 > nums[cur])
  • swap(nums,cur++,l++);
  • else
  • cur++;
  • }
  • }
  • public void swap(int[] arr,int i,int j) {
  • int t = arr[i];
  • arr[i] = arr[j];
  • arr[j] = t;
  • }
  • }
Last Modified: May 12, 2021
Archives Tip
QR Code for this page
Tipping QR Code