给定一个数组,该数组存贮R,G,B三种字符,将该数组按RGB顺序排序,不能使用辅助内存空间,且只能遍历数组一次。
来源:互联网 发布:scala编程思想 下载 编辑:程序博客网 时间:2024/05/19 19:30
如果不限制空间和时间,这个题目很简单,统计RGB的个数在重新填充或者干脆用数字排序。但是如果限定了空间和时间就要动点脑子。
思路大概是将后面的RG按顺序拿到前面,并记下每次应该插入的位置:
1.r.g分别记录R,G的插入位置,从头开始遍历数组。
2. 如果a[i]是R,交换++r和i位置的数,并且将g++,如果交换后i指向的是G,再G换回来。
3.如果啊a[i]是G交换++g位置和i位置的数。
#include<stdio.h>void swap(char *a,int low, int high){char temp;temp = a[low];a[low]=a[high];a[high]=temp;}char *sort(char *a,int low, int high){int r=low-1,g=low-1,i;for(i=0;i<high;i++){if(a[i]=='R'){swap(a,++r,i);g++;if(a[i]=='G')swap(a,g,i);}else if (a[i]=='G')swap(a,++g,i);}}int main(){char a[10] = "RGBBRGGBGB",*b;int len=strlen(a),i;b = sort(a,0,len);printf("%d\n",len);for(i=0;i<len;i++){printf("%c",a[i]);}}
0 0
- 给定一个数组,该数组存贮R,G,B三种字符,将该数组按RGB顺序排序,不能使用辅助内存空间,且只能遍历数组一次。
- 给定一个字符数组,存储有R、G、B字符,将所有字符按照RGB顺序排序
- 【解法】给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。 要求:空间复杂度是O(1),且只能遍历一次字符串。
- )RGB排序,一个字符串,里面只有三种字符R G B,所有的R都在G的前面,所有的G都在B的前面。将给定字符串按照此规律排序。要求不允许用辅助空间,复杂度控制在O(N)。遍历一遍就排好序。
- 给定一个数组,对该数组进行全排列
- RGB排序,一个字符串,里面只有三种字符R G B,所有的R都在G的前面,所有的G都在B的前面。将给定字符串按照此规律排序。要求不允许用辅助空间,复杂度控制在O(N)。
- 给定一个数组,返回最大子数组的累加和并且返回该子数组
- 数组排序:给定一个数组,将数组中的元素从小到大排序
- 要求从键盘输入一个二维数组,然后将该二维数组按从大到小的顺序排列。
- 定义一个100长度的整型数组,使用rand函数生产随机数对每个元素进行赋值,顺序遍历该数组,输出所有值大于50的数
- 一个数组中有n种符号,对该数组进行排序
- 依次从数组a中取出一个四位数,如果该四位数连续大于该四位数以后的5个数,且该数是奇数,则把这个四位数按从小到大的顺序存入数组b中,并计算满足上述条件的四位数的个数cnt。
- 已知获得的RGB像素值为1维数组,将像素分别存入R、G、B 3个通道
- 如何将一个结构体拷贝到字符数组缓冲区,再原封不动的读出该结构
- 遍历数组、数组排序
- 【二维数组】声明一个二维数组,为该数组随机赋值,并输出该数组
- 给定一个无序数组,请调整该数组,调整成奇数放在数组的左边,偶数放在数组的右边。但是奇数与奇数之间的相对顺序不变,偶数和偶数之间的相对顺序也不变。
- //C++ 字符数组顺序排序
- Ubuntu下编译和安装源文件
- (一)ROS系统命令学习
- POJ 3009
- 研发管理的一点心得
- 安全的进行new 操作
- 给定一个数组,该数组存贮R,G,B三种字符,将该数组按RGB顺序排序,不能使用辅助内存空间,且只能遍历数组一次。
- 办公室“杀手” 消耗你的孕力
- Android 最火的快速开发框架XUtils
- Python
- qt QJsonDocument QVariant
- Android 自动化测试工具Robotium 之Solo类的详细说明
- C语言单链表实现19个功能完全详解
- (二)创造一个简单的ROS package
- c# 泛型 类型参数的约束(C# 编程指南)