数据结构与算法分析2.19题
来源:互联网 发布:centos latex 编辑:程序博客网 时间:2024/06/06 00:44
问题描述:
编写一个程序求解主要元素。(何为主要元素:当某个元素在数组中出现的次数大于数组个数的一半时,该元素即为主要元素)。
分析:这道题在leetcode上出现过,思想是如果将主要元素摞成一摞,然后将非主要元素摞成另一摞,因为主要元素的个数要占数组个数的一半以上,所以,非主要元素的高度一定小于主要元素的高度。那么一层一层的往下削,削到最后时还剩下的一定是主要元素。
现在的困难是我们并不知道谁是主要元素(废话)。那我们可以假设某个元素为候选元素,那么从前向后遍历,如果某值与候选元素相同,引用计数加1,否则-1,这样当引用计数变成0时,表示候选元素选错了,要重选。然后假设下一个点为候选元素。试想一下如果该元素为非主要元素,那么最后它一定会被主要元素抵消掉。
但是这样得到的结果仅仅是候选项还不能确保一定是主要元素,所以还需要再走一遍来验证结果正确与否
代码如下:
int getMainData(int *nums,int size) { if (size <= 0) return -1; int base = nums[0]; int baseCount = 1; for (int i = 1; i < size; i++) { if (baseCount == 0) { base = nums[i]; baseCount = 1; } if (nums[i] != base) baseCount--; else baseCount++; } //check if the real main data int count = 0; for (int i = 0; i < size; i++) { if (nums[i] == base) count++; } if (count > size / 2) return base; return -1;}
0 0
- 数据结构与算法分析2.19题
- 数据结构算法与分析
- 数据结构与算法分析
- 数据结构与算法分析
- 数据结构与算法分析
- 数据结构与算法分析
- 数据结构与算法分析
- 数据结构与算法分析
- 数据结构与算法分析
- 《数据结构与算法分析》
- 数据结构与算法分析c++:算法分析
- 数据结构与算法分析c++:算法分析
- 数据结构与算法分析P241T4
- 数据结构与算法分析 感悟
- 数据结构与算法分析 树
- 《数据结构与算法分析》Chap3
- 《数据结构与算法分析》Chap4
- 数据结构与算法分析-表
- C++全局变量的声明与定义的详解
- SuiShenJi项目_登录界面
- 深入理解java异常处理机制
- xxx is not in the sudoers file.This incident will be reported
- 数据结构之AVL树
- 数据结构与算法分析2.19题
- MySQL 设计与开发规范
- Java对象的序列化和反序列化
- LabVIEW的主界面如何隐藏
- Android_Fragment实现Tab
- iOS9适配
- AFNetworking判断当前手机的网络状态
- Linux使用expect脚本实现远程机器自动登录
- ios xcode开发工具快捷键