zoukankan      html  css  js  c++  java
  • LeetCode 75. 颜色分类

    题目链接

    75. 颜色分类

    题目思路

    如果按照平常做法的话这个题的确非常的容易,我们先对数组中的数进行计数,然后再按个插入即可。
    但是进阶要求我们使用一趟扫描并且还是常数空间的做法。
    那么我们其实可以在第一次扫描数组的时候就把它放置到相应的位置了。因为数组只有012三种数字,我们其实只需要留意三个中的两个即可,因为总数已经确定了,我们把其中两种安排好了,另外一种自然就会落到对应的位置上。
    我们利用left, right来记录当前放置的0和2的位置,再利用i来遍历数组。
    如果nums[i] == 0,那么我们就把这个数字放到nums[left]的位置上,同时因为我们是从左到右进行扫描的,左边交换过来的数字一定是0或者1,所以不需要进行再次判断。
    如果nums[i] == 2,那么我们就把这个数字放到nums[right]的位置上,但是因为我们并不知道交换回来的数字是什么,所以要再对交换回来的数字进行判断。

    代码实现

    class Solution {
        public void sortColors(int[] nums) {
            int left = 0;
            int right = nums.length - 1;
            for(int i = 0; i <= right; i++){
                if(nums[i] == 0){
                    int temp = nums[i];
                    nums[i] = nums[left];
                    nums[left] = temp;
                    left++;
                }else if(nums[i] == 2){
                    int temp = nums[i];
                    nums[i] = nums[right];
                    nums[right] = temp;
                    right--;
                    //为了对交换回来的数字再次判断
                    i--;
                }
            }
        }
    }
    
  • 相关阅读:
    LAMP搭建示例
    MySQL主从
    list多字段去重
    mysql按照某一个条件进行分组统计,同时又要保证一个相同字段的数据只统计一次
    sentinel自定义异常处理
    sentinel规则持久化
    zookeeper
    shiro
    iframe之间传递参数
    自定义标签
  • 原文地址:https://www.cnblogs.com/ZJPaang/p/13777771.html
Copyright © 2011-2022 走看看