LintCode 第46题 主元素 【贪心算法】
来源:互联网 发布:linux如何打开pdf文件 编辑:程序博客网 时间:2024/06/16 05:51
题目描述:
给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。
样例
给出数组[1,1,1,1,2,2,2],返回 1
这道题属于贪心算法,解法有多种,关键是找到最优解。
最容易让人想到的解法就是遍历然后统计元素的个数,然后得出来最大的就是要找的主元素。但是这个效率低,最优的解法是将数组的元素分为两类,一类是主元素,另一类是非主元素,声明count计数变量和result,if(count == 0)则将数组[i]元素赋值给result,result元素和数组[i]值做比较,如果相等count++,否则count--,也就是把当前两个不相等的值拿走,这两个可能都是非主元素,也可能一个是主元素另一个不是,但是最终遍历结束result存储的一定是主元素的值。
时间复杂度O(N)。一次遍历就够了。
实现代码:
int selectMajorityNumber(int *a,int length){ int result = 0; int count = 0; for (int i = 0; i<length; i++) { if (count == 0) { result = a[i]; count++; } else { if (a[i] != result) { count--; } else { count++; } } } return result;}int main(int argc, const char * argv[]) { // insert code here... std::cout << "Hello, World!\n"; int a[5] = {1,3,3,3,4}; int value = selectMajorityNumber(a, 5); return 0;}
阅读全文
0 0
- LintCode 第46题 主元素 【贪心算法】
- LintCode-贪心-主元素
- LintCode 第82题 落单的数 【贪心算法】
- LintCode 46 主元素
- LintCode之46 主元素
- lintcode&九章算法——lintcode NO.5 第k大元素 ? 带解决
- (lintcode)第5题第k大元素
- LintCode 第K大元素
- LintCode-第k大元素
- 【LintCode】第k大元素
- LintCode 第172删除元素
- LintCode 第452题 删除链表中的元素
- (lintcode)第452题删除链表中的元素
- (lintcode)第16题 带重复元素的排列
- (lintcode)第18题 带重复元素的子集
- LintCode 第452题 删除链表中的元素
- LintCode-剑指Offer-(46)主元素
- Lintcode 主元素
- 安卓自定义控件--TypedArray 详解
- HashMap,Hashtable,SynchronizedHashMap,ConcurrentHashMap
- java 线程作业2
- webpack-stream
- 用sqoop导入数据到HIVE和HDFS中
- LintCode 第46题 主元素 【贪心算法】
- 菜鸟学MVC遇到的问题(一)
- <url-pattern>中的 *.action *.do /*
- fullcalendar 属性修改General Display
- Spring启动后获取所有拥有特定注解的Bean
- 操作系统基础
- LXC C API 使用
- 彻底解决Intellij IDEA/WebStorm2017.2 中文无法输入 中英文没法自由切换问题?
- Maven学习笔记(二)——Maven目录结构、pom.xml解析&基础命令(一)