找出出现次数大于等于总数一半的数 (O(1)空间 O(n)时间)
来源:互联网 发布:nginx grpc 编辑:程序博客网 时间:2024/05/02 02:53
在不保证存在的情况下,先假设存在,若存在则每次删除两个不同的数字,最后的结果无非是全部删光,或者还剩一个,可以用一个数字个数的计数器模拟这个过程,模拟的复杂度是O(n)的,得到那个数字后,再O(n)扫一遍判断是否出现次数大于等于总数一半即可
class Gift {public: int getValue(vector<int> gifts, int n) { // write code here int cnt = 0, num = 0; for (int i = 0; i < n; i ++) { if (cnt == 0) { num = gifts[i]; cnt ++; continue; } if(num == gifts[i]) { cnt ++; } else { cnt --; } } int pcnt = 0; for (int i = 0; i < n; i ++) { if (gifts[i] == num) { pcnt ++; } if (pcnt >= (n + 1) / 2) return num; } return 0; }};
0 0
- 找出出现次数大于等于总数一半的数 (O(1)空间 O(n)时间)
- 《编程题》找出数组中出现次数超过一半的数(时间复杂度O(n),空间复杂度为O(1))
- 在时间复杂度为 O(n) 内找出数组中出现次数超过一半的数
- 找出数组中出现次数超过一半的数(时间复杂度O(n))
- 找出一个数组中出现次数超过一半的那个数字,要求时间复杂度O(n)和空间复杂度为O(1)。
- 如何在O(n)的时间复杂度内找出数组中出现次数超过一半的数
- 在O(n)的时间复杂度内找出数组中出现次数超过了一半的数
- 如何在O(N)的时间复杂度内找出数组中出现次数超过了一半的数
- 如何在O(n)的时间复杂度内找出数组中出现次数超过了一半的数
- 摩尔投票法, O(n) O(1) 求出现次数大于n/2,n/3次数的数
- 已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。
- 已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
- 已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
- 数组中出现次数超过一半的数字:虽然hash是o(1)的时间,但是空间却有O(n)
- 如何快速找出一个数组中只出现一次的两个数,其他元素出现两次?保证时间复杂度O(n),空间复杂度O(1)
- 现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
- 现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
- 现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
- 十五.Android网络通信与Volley简单介绍
- bzoj 2927 博弈论
- greendao 数据库工程里使用的问题 database from version 3 to 1
- 通过IIS配置网站和相关错误处理
- Struts2入门——4,访问Action
- 找出出现次数大于等于总数一半的数 (O(1)空间 O(n)时间)
- [LeetCode] 152. Maximum Product Subarray
- 声明
- Make编译学习笔记(三)Makefile基本规则
- Perl语言入门(09 perl中自带的函数)
- 结构体指针分析
- 最长严格上升子序列
- HTML5所有标签汇总
- android application方法执行多次