代码编织梦想

问题描述来源leetcode

一、问题描述:

75颜色分类
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。                                                   0   1   2
必须在不使用库内置的 sort 函数的情况下解决这个问题。                                                 红  白  蓝
示例 1:   输入:nums = [2,0,2,1,1,0]  输出:[0,0,1,1,2,2]
示例 2:   输入:nums = [2,0,1]        输出:[0,1,2]
提示:     n == nums.length    1 <= n <= 300   nums[i] 为 0、1 或 2
进阶:     你能想出一个仅使用常数空间的一趟扫描算法吗?

二、题解

和这道有类似的思路:21合并两个有序链表-hot100-Java

做过这个类似的后应该可以很快做出来了·。

思路

这里考的应该是数学吧。

本来想用哈希来处理的,但是还是一开始就用了最优解吧,。一开始的解可能不是最优,但是用其他功能丰富的数据结构会方便很多,做出来的概率也大,如果一开始直奔最优解,那么有可能做不出来或者很久才做出来。但是这个题好像很简单,就直接往最优解的思路写了。

首先,不能用内部排序,也不能用较多的空间。本来也没想到要用较多的空间,直接想到了最优解:

先遍历一次找出3种颜色的个数,然后确定好区间,3种颜色的个数可以划分出3段不同索引范围的空间,于是就将每段索引对应的元素改成对应的数字即可。这里难点就是划分区间,要找到索引边界。思考一下就知道了。

题解:

class Solution {
    public void sortColors(int[] nums) {
        int red = 0;
        int white = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 0) {
                red++;
            } else if (nums[i] == 1) {
                white++;
            }
        }
        int index = 0;//如果red = 2 [0,1,2],if red = 0,skip
        for (; index < red; index++) nums[index] = 0;
        for (; index < red + white; index++) nums[index] = 1;
        for (; index < nums.length; index++) nums[index] = 2;
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ws_please/article/details/129476735

[ 热题 HOT 100]---75. 颜色分类---计数排序-爱代码爱编程

1 题目描述 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 进阶

LeetCode 热题 HOT 100 Java题解——75. 颜色分类-爱代码爱编程

LeetCode 热题 HOT 100 Java题解 75. 颜色分类双指针复杂度分析 75. 颜色分类 题目: 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中

【刷题目录1】按标签刷LeetCode热题HOT100 java题解分类汇总-爱代码爱编程

1.栈 【刷题1】LeetCode 20. 有效的括号 java题解【刷题1】LeetCode 394. 字符串解码 java题解※【刷题1】LeetCode 155. 最小栈 java题解 2.动态规划 【刷题1】LeetCode 53. 最大子序和 java题解※【刷题1】LeetCode 62. 不同路径 java题解【刷题1】LeetCode

leetcode hot100颜色分类 java-爱代码爱编程

题目描述 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 输入:nums = [2,0,2,1,1,0] 输出:[0,0,1,1,2,2] 方法: 双指针: 指针left指向数组第一个数,right指向数

LeetCode 热题 HOT 100-爱代码爱编程

LeetCode 热题 HOT 100之JAVA解法 第1题 两数之和(简单)代码第2题 两数相加(中等)代码第3题 无重复字符的最长子串(中等)代码第4题 寻找两个正序数组的中位数(困难)代码第5题 最长回文子串(中等)代码第10题 正则表达式匹配(困难)代码第11题 盛最多水的容器(中等)代码第15题 三数之和(中等)代码第17题 电话号码的字

【java】leetcode刷题记录+简单思路(hot100+剑指offer 简单\中等难度)-爱代码爱编程

避免重复刷题每次都两眼一抹黑咩都不记得,简单记一下思路。大概每天*10的进度。 1. 两数之和(简单) 题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可

力扣hot100-爱代码爱编程

最小栈 Deque<Integer> stack1; Deque<Integer> stack2; public void pop() { //这里如果用==比较是比较两个Integer对象的地址,Integer能缓存(-128,127)这个范围的值的Integer对象,用==比较这个范围的值会返回true,超过

力扣hot100 75题颜色分类 打卡-爱代码爱编程

2021年11月25日 75. 颜色分类 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 思路分析:打眼一看,中等难度,也不知道题目要干啥,但是看了示例就清楚了,这不就是一个简单的排序题,所

LeetCode 热题 HOT 100Java题解之75. 颜色分类(击败了100%的用户)-爱代码爱编程

题目: 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 示例:   输入:nums = [2,0,2,1,1,0] 输出:[0,0,1,1,2,2] 思路: 这道题看上去就是简单的

LeetCode 热题 HOT 100 第31天:“颜色分类”-爱代码爱编程

继续刷LeetCode 热题 HOT 100 的题目,并且在博客更新我的solutions。在csdn博客中我会尽量用文字解释清楚,相关Java代码大家可以前往我的个人博客jinhuaiyu.com中查看。题目:颜色分类 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排

Leetcode Hot100不熟练题目 75.颜色分类-爱代码爱编程

1、题目描述 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库的sort函数的情况下解决这个问题。 示例 1: 输入:nums = [2,0,2,1,1,0] 输出:[0,0,1,1,

力扣HOT100-Java个人题解整理与总结-爱代码爱编程

 LeetCode 热题 HOT 100 1,两数之和 难度简单13695 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。

【*】leetcode-75. 颜色分类-爱代码爱编程

package com.leetcode.medium; import java.util.Arrays; /* * 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序, * 使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 * 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库的so

leetcode hot100刷题记录(java)_xiaoxin的博客的博客-爱代码爱编程

leetcode hot100 链接 1.两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设

leetcode hot 100_zombie._的博客-爱代码爱编程

LeetCode Hot 100 刷题记录 LeetCode Hot 100 1. 两数之和 代码思路 将出现过的值存储在Map中若当前遍历循环到num,那么只需要在map中找到是否曾经遍历过tar

leetcode热题hot100汇总——持续更新中-爱代码爱编程

文章目录 前言1. 两数之和2. 两数相加3.无重复字符的最长子串4. 寻找两个正序数组的中位数5. 最长回文子串10. 正则表达式匹配11. 盛最多水的容器15. 三数之和17. 电话号码的字母组合19. 删除

leetcode hot100_leetcode.cn hot100-爱代码爱编程

Leetcode Hot 100 1. 两数之和 思路:hashmap的使用,key存储值,value存储数组下标。 class Solution { public int[] twoSum(int[] num

基于 bert 实现的情感分析(文本分类)-爱代码爱编程

文章目录 基于 BERT 的情感分析(文本分类)基本概念理解简便的编码方式: One-Hot 编码突破: Word2Vec编码方式新的开始: Attention 与 Transformer 模型四方来降: 超一

leetcode 热题 hot 100 java 题解 -爱代码爱编程

练习地址 LeetCode 热题 HOT 100 Java 题解 -- Part 1 1. 两数之和 12. 两数相加 23. 无重复字符的最长子串 34. 寻找两个正序数组的中位数 45. 最长回文子串 56