lintcode:排颜色 II
排颜色 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相关推荐
- 143. Sort Colors II - 排颜色 II(rainbowSort彩虹排序)
Description 给定一个有n个对象(包括k种不同的颜色,并按照1到k进行编号)的数组,将对象进行分类使相同颜色的对象相邻,并按照1,2,...k的顺序进行排序. 注意事项 You are no ...
- Lintcode: k Sum II
Given n unique integers, number k (1<=k<=n) and target. Find all possible k integers where the ...
- lintcode: 跳跃游戏 II
跳跃游戏 II 给出一个非负整数数组,你最初定位在数组的第一个位置. 数组中的每个元素代表你在那个位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. 样例 给出数组A = ...
- LintCode: Single Number II
C++ 解法(1) 求出每个比特位的数目,然后%3,如果这个比特位只出现1次,那么这比特位就会余1,否则就会整除. 把每个余下的比特位求出来,就知道是哪个数只出现1次了. 1 class Soluti ...
- LintCode 125. 背包问题 II(DP)
1. 题目 有 n 个物品和一个大小为 m 的背包. 给定数组 A 表示每个物品的大小 数组 V 表示每个物品的价值. 问最多能装入背包的总价值是多大? 样例 1: 输入: m = 10, A = [ ...
- 计算机中的颜色XIII——颜色转换的快速计算公式
本文的公式的基础都是在前文的基础上的.详情请参看前文: 计算机中的颜色I--颜色概述 计算机中的颜色II--VB2005中的Color结构 计算机中的颜色III--HSV表示方法 计算机中的颜色IV- ...
- LintCode解题目录
看见 LintCode 的代码能力测试CAT(Coding Ability Test)挺好,有倒计时,挺有面试紧迫感.做个记录. 另有本人 LeetCode解题目录.<程序员面试金典>解题 ...
- upc 个人训练赛第三场:排课表(容斥原理+组合数学)
问题 A: 骑车还是走路 题目描述 在石油大学校园里,没有自行车,上课办事会很不方便.但实际上,并非去办任何事情都是骑车快,因为骑车总要找车.开锁.停车.锁车等,这要耽误一些时间.假设找到自行车,开锁 ...
- 系统软件工程师面试题
一.c++语言部分 1. extern c 将让 C++ 中的函数名具备 C-linkage 性质,目的是让 C 代码在调用这个函数时,能正确的链接到具体的地址. C调用C++,使用extern &q ...
最新文章
- vue.js循环for(列表渲染)详解
- JavaScriptSerializer-枚举的JSON序列化为字符串
- 图文详解CDC技术,看这一篇就够了!
- jQuery学习笔记2
- python采用函数编程模式_浅谈Python 函数式编程
- POI大量数据读取内存溢出分析及解决方案
- notes_2019
- POJ1521 LA2088 HDU1053 ZOJ1117 Entropy【哈夫曼编码】
- [Share]浏览器的历史
- .net的XML对象序列化VS WCF中xml序列化问题
- 计算机组成原理——基础知识
- mysql海量数据查询/处理
- java中常用的缓存流程、缓存分类、缓存问题
- 【R语言报错解决】—存在非数值型变量,Error in c_max * c_min : non-numeric argument to binary operator,如何在数据导入后转为数值型变量?
- Python实现:超分子化学的建模------如何操控客体分子穿过主体分子和计算该过程能量变化(高斯(Gauss)输入文件为例,一键批量处理)
- javacv 写mp4_JavaCV 实现视频转码
- Arduino ESP8266 AP Web 服务器示例程序
- 解除微信授权的html5网页,微信授权登录网页管理在哪里看?如何取消授权
- 训练集,验证集,测试集(以及为什么要使用验证集?)(Training Set, Validation Set, Test Set)
- Linux下配置日志服务器
热门文章
- 硕博士生参加学术会议重要吗?如何选择?注意什么?
- GraphPad Prism:如何在轴上放置一个或多个缺口?
- 网页设计作业_Dreamweaver简单网页成品
- php7 参数类型限定,PHP参数类型限制 - Corwien的博客 - OSCHINA - 中文开源技术交流社区...
- 这样读源码,不牛X也难
- gc日志一般关注什么_GC日志说明
- 计算机与网络应用教材格式化,《计算机与网络应用》正式稿.docx
- 吴恩达深度学习笔记11-Course4-Week2【深度卷积网络:实例探究】
- html5杂记(1)
- 自制操作系统学习笔记(2)-汇编程序体验