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--;
                }
            }
        }
    }
    
  • 相关阅读:
    CSS3动画设置后台登录页背景切换图片
    类别联动下拉菜单
    自己写的一个逻辑分页
    TP5多入口设置
    zabbix安装配置界面点击next step没反应
    nginx访问不了zabbix安装配置界面
    mount挂载问题
    linux下ssh的几种验证方式
    linux下nat配置
    Linux命令行上程序执行的那一刹那!
  • 原文地址:https://www.cnblogs.com/ZJPaang/p/13777771.html
Copyright © 2011-2022 走看看