用哈希算法的思想解决排序和字符串去重问题,时间复杂度为O(N)
来源:互联网 发布:movo润滑液 知乎 编辑:程序博客网 时间:2024/03/29 08:01
第一个题目:
int a[] = {12,13,12,13,19,18,15,12,15,16,17},要求对数组a进行排序,要求时间复杂度为O(N)
我们所知道的常规排序中,最优的解法也就是O(N*log2^N),那如何做到时间复杂度为O(N)呢?
运用哈希算法的思想就可以优化算法为O(N)
void Sort(int* a, int n){assert(a);const int N = 20;int b[N] = { 0 };for (int i = 0; i < n; i++){int key = a[i];++b[key];}int index = 0;for (int i = 0; i < N; i++){for (int j = 0; j < b[i]; j++){a[index] = i;++index;}}}
int main(){int arr[] = { 12, 13, 12, 13, 19, 18, 15, 12, 15, 16, 17 };int sz = sizeof(arr) / sizeof(arr[0]);Sort(arr, sz);for (int i = 0; i < sz; i++){cout << arr[i] << " ";}cout << endl;cin.get();return 0;}
第二道题
删除小写字母字符串中重复字符。如果可以,优先删除重复字符中排在比他小字符前面的字符。 比如,输入:bbcacdww;输出:bacdw
暴力求解的效率太低,我们同样采用哈希算法的思想。
void DeleSame(char *a, int len){bool b[256];int key = 0;memset(b, 0, sizeof(b));for (int i = 0; i < len; i++){if (!b[a[i]]){b[a[i]] = true;a[key++] = a[i];}}a[key] = '\0';}int main(){char arr[] = "ab111bcde332e";int len = strlen(arr);DeleSame(arr, len);cout << arr << endl;system("pause");return 0;}
阅读全文
0 0
- 用哈希算法的思想解决排序和字符串去重问题,时间复杂度为O(N)
- 时间复杂度为O(n)的排序算法--计数算法
- 时间复杂度为O(n)的排序算法
- 面试9:时间复杂度为O(n)的排序算法
- 基于时间复杂度为O(n)的排序算法
- 时间复杂度为O(N),空间复杂度为O(1)的排序算法
- 时间复杂度为O(n)的排序
- 时间复杂度为O(n)的排序
- 实现排序算法,时间复杂度为O(n)
- 不用额外空间的整数交换以及时间复杂度为O(n)空间复杂度为O(1)的排序算法
- Java练习:时间复杂度为O(n*n)的三大基本排序算法
- 【排序】时间复杂度为O(N^2)的排序——冒泡、选择和插入排序
- O(N)时间复杂度的排序算法-计数排序
- 基于堆栈的时间复杂度为O(n)的箱子排序算法实现
- 时间复杂度为O(n+t)的排序
- 有1,2...一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),时间复杂度为O(1)
- 排序的时间复杂度为O(n),空间复杂度为O(1)
- 排序算法-o(n)时间复杂度
- __bridge、out parameter使用不当引起的BAD_ACCESS错误
- 集合(一)Collection
- 百练2819:W的密码题解
- 指针、内存操作中的一些其它注意点
- oracle undo segments, do blocks
- 用哈希算法的思想解决排序和字符串去重问题,时间复杂度为O(N)
- Matrx的数学原理
- Toastr消息提示框的使用
- PYTHON机器学习实战——集成学习 AdaBoost元算法
- TensorFlow运行MNIST样例碰到下载数据的问题
- shell编程之环境变量配置文件
- 【程序】Marvell 88W8686 WiFi模块与SD内存卡同时插在SDIO总线上的初始化代码
- RE:JAVA学习-方法调用
- HTB内部实现分析(转)