排颜色 II

给定一个有n个对象(包括k种不同的颜色,并按照1到k进行编号)的数组,将对象进行分类使相同颜色的对象相邻,并按照1,2,...k的顺序进行排序。

样例

给出colors=[3, 2, 2, 1, 4]k=4, 你的代码应该在原地操作使得数组变成[1, 2, 2, 3, 4]

解题

直接快排

class Solution {/*** @param colors: A list of integer* @param k: An integer* @return: nothing*/public void sortColors2(int[] colors, int k) {// write your code heresort(colors,0,colors.length - 1);}public void sort(int[] A,int low,int high){if(low >= high)return ;int i = low;int j = high;int tmp = A[low];while(i<j){while(i<j && A[j]>tmp) j--;if(i<j){A[i] = A[j];i++;}while(i<j && A[i]<= tmp) i++;if(i<j){A[j] = A[i];j--;}}A[i] = tmp;sort(A,low,i-1);sort(A,i+1,high);}
}

Java Code

标记法,先统计各个颜色的次数,然后根据数组更改次数

class Solution {/*** @param colors: A list of integer* @param k: An integer* @return: nothing*/public void sortColors2(int[] colors, int k) {// write your code hereint[] flag = new int[k+1];for(int i = 0;i<colors.length;i++){flag[colors[i]]++;}int c = 1;for(int i = 0;i<colors.length;i++){while(flag[c]==0){// 颜色可能为0 的比较多c++;}colors[i] = c;flag[c]--;}}}

View Code

只有三种颜色的排序 的时候,但是当有多个的时候判断情况太多。

在九章看到两个指针的方法

class Solution {/*** @param colors: A list of integer* @param k: An integer* @return: nothing*/public void sortColors2(int[] colors, int k) {int count = 0;int start = 0;int end = colors.length-1;while (count < k) {int min = Integer.MAX_VALUE;int max = Integer.MIN_VALUE;for (int i = start; i <= end; i++) {min = Math.min(min, colors[i]);max = Math.max(max, colors[i]);}int left = start;int right = end;int cur = left;while(cur <= right) {if (colors[cur] == min) {swap(left, cur, colors);cur++;left++;} else if (colors[cur] > min && colors[cur] < max) {cur++;} else {int tmp = colors[cur];swap(cur, right, colors);right--;}}count += 2;start = left;end = right;}}void swap(int left, int right, int[] colors) {int tmp = colors[left];colors[left] = colors[right];colors[right] = tmp;}}

理解不透,脑子太笨。

lintcode:排颜色 II相关推荐

  1. 143. Sort Colors II - 排颜色 II(rainbowSort彩虹排序)

    Description 给定一个有n个对象(包括k种不同的颜色,并按照1到k进行编号)的数组,将对象进行分类使相同颜色的对象相邻,并按照1,2,...k的顺序进行排序. 注意事项 You are no ...

  2. Lintcode: k Sum II

    Given n unique integers, number k (1<=k<=n) and target. Find all possible k integers where the ...

  3. lintcode: 跳跃游戏 II

    跳跃游戏 II 给出一个非负整数数组,你最初定位在数组的第一个位置. 数组中的每个元素代表你在那个位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. 样例 给出数组A =  ...

  4. LintCode: Single Number II

    C++ 解法(1) 求出每个比特位的数目,然后%3,如果这个比特位只出现1次,那么这比特位就会余1,否则就会整除. 把每个余下的比特位求出来,就知道是哪个数只出现1次了. 1 class Soluti ...

  5. LintCode 125. 背包问题 II(DP)

    1. 题目 有 n 个物品和一个大小为 m 的背包. 给定数组 A 表示每个物品的大小 数组 V 表示每个物品的价值. 问最多能装入背包的总价值是多大? 样例 1: 输入: m = 10, A = [ ...

  6. 计算机中的颜色XIII——颜色转换的快速计算公式

    本文的公式的基础都是在前文的基础上的.详情请参看前文: 计算机中的颜色I--颜色概述 计算机中的颜色II--VB2005中的Color结构 计算机中的颜色III--HSV表示方法 计算机中的颜色IV- ...

  7. LintCode解题目录

    看见 LintCode 的代码能力测试CAT(Coding Ability Test)挺好,有倒计时,挺有面试紧迫感.做个记录. 另有本人 LeetCode解题目录.<程序员面试金典>解题 ...

  8. upc 个人训练赛第三场:排课表(容斥原理+组合数学)

    问题 A: 骑车还是走路 题目描述 在石油大学校园里,没有自行车,上课办事会很不方便.但实际上,并非去办任何事情都是骑车快,因为骑车总要找车.开锁.停车.锁车等,这要耽误一些时间.假设找到自行车,开锁 ...

  9. 系统软件工程师面试题

    一.c++语言部分 1. extern c 将让 C++ 中的函数名具备 C-linkage 性质,目的是让 C 代码在调用这个函数时,能正确的链接到具体的地址. C调用C++,使用extern &q ...

最新文章

  1. vue.js循环for(列表渲染)详解
  2. JavaScriptSerializer-枚举的JSON序列化为字符串
  3. 图文详解CDC技术,看这一篇就够了!
  4. jQuery学习笔记2
  5. python采用函数编程模式_浅谈Python 函数式编程
  6. POI大量数据读取内存溢出分析及解决方案
  7. notes_2019
  8. POJ1521 LA2088 HDU1053 ZOJ1117 Entropy【哈夫曼编码】
  9. [Share]浏览器的历史
  10. .net的XML对象序列化VS WCF中xml序列化问题
  11. 计算机组成原理——基础知识
  12. mysql海量数据查询/处理
  13. java中常用的缓存流程、缓存分类、缓存问题
  14. 【R语言报错解决】—存在非数值型变量,Error in c_max * c_min : non-numeric argument to binary operator,如何在数据导入后转为数值型变量?
  15. Python实现:超分子化学的建模------如何操控客体分子穿过主体分子和计算该过程能量变化(高斯(Gauss)输入文件为例,一键批量处理)
  16. javacv 写mp4_JavaCV 实现视频转码
  17. Arduino ESP8266 AP Web 服务器示例程序
  18. 解除微信授权的html5网页,微信授权登录网页管理在哪里看?如何取消授权
  19. 训练集,验证集,测试集(以及为什么要使用验证集?)(Training Set, Validation Set, Test Set)
  20. Linux下配置日志服务器

热门文章

  1. 硕博士生参加学术会议重要吗?如何选择?注意什么?
  2. GraphPad Prism:如何在轴上放置一个或多个缺口?
  3. 网页设计作业_Dreamweaver简单网页成品
  4. php7 参数类型限定,PHP参数类型限制 - Corwien的博客 - OSCHINA - 中文开源技术交流社区...
  5. 这样读源码,不牛X也难
  6. gc日志一般关注什么_GC日志说明
  7. 计算机与网络应用教材格式化,《计算机与网络应用》正式稿.docx
  8. 吴恩达深度学习笔记11-Course4-Week2【深度卷积网络:实例探究】
  9. html5杂记(1)
  10. 自制操作系统学习笔记(2)-汇编程序体验