颜色分类-排序

 

/*

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-colors
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


* 一个只包含0、1、2的整型数组,要求对它进行【原地】排序
* 你能想出一个仅使用常数空间的一趟扫描算法吗?
*
* 空间复杂度O(1),时间复杂度O(n)
*/

 

思路: 利用到三指针遍历,找到0的放前面来 是2的放后面去 是1保存不动

public void sortColors(int[] nums) {
  int i = 0;
  int l = 0;
  int r = nums.length - 1;
while (i <= r) {
  if (nums[i] == 0) {
    swap(nums, i++, l++);
  } else if (nums[i] == 1) {
    i++;
  } else {
    swap(nums, i, r--);
   }
  }
}

private void swap(int[] nums, int i, int j) {
  int tmp = nums[i];
  nums[i] = nums[j];
  nums[j] = tmp;
}

posted @ 2021-06-26 16:01  syh-918  阅读(469)  评论(0)    收藏  举报