主元素问题
2016-01-25 16:08
288 查看
前提是主元素一定存在
/** * 核心思想:在元素数组中,删去不同的两个元素,数组的主元素保持不变。 */ public class MainElement { public static void main(String[] args) { int[] numbers = {1, 2, 1, 2, 2, 2, 3}; int mainElement = findMainElement(numbers); System.out.println(mainElement); } private static int findMainElement(int[] numbers) { int len = numbers.length; if (len == 0) { return 0; } if (len == 1) { return numbers[0]; } // 刚开始的时候,假设第0个元素是主元素,那么此时有1个主元素 int count = 1; int mainFrom = 0; int start = numbers[mainFrom]; // 第0个元素已经由假设的主元素占据,那么将从第1个元素开始比较 for (int i = 1; i < len;) { if (start == numbers[i]) { // 如果当前元素与假设的主元素相同,计数+1 count++; } else { // 如果当前元素与假设的主元素不同,计数-1 count--; } if (count == 0) { // 扔掉了偶数个(2、4、6...)不同的元素,需要将计数置为1,此时假设下一个元素为主元素,则指针需要指向下下个(你没有看错,确实是“下下个”)元素 count = 1; mainFrom = i+1; start = numbers[mainFrom]; i += 2; continue; } if (count > (len-mainFrom)/2) { // 这时候人品爆发,捡到的元素个数已经大于(从mainFrom到len-1的元素个数【包含mainFrom和len-1】)/2,可以确定该元素就是我们要找的 return numbers[mainFrom]; } i++; } return start; } }
相关文章推荐
- 【箭扣观点】移动开发服务之“元素2015”
- StringUtils
- sqlserver 删除数据库日志
- 静态页生成
- PHP编译configure时常见错误
- Linux下修改swap的大小
- Centos 6.6搭建squid代理服务
- 产品策划八:七宗罪解读の人性最深处的原始需求分析
- Websocket(2)--接口说明
- Delphi XE6 试用Android视频采集
- NSAttributedString装载图片与UIImageView装载图片对比
- 数字图像处理15--互相关匹配边缘检测
- 看了关于全职女性的文字,我想到了一些事情
- Deep Reinforcement Learning 基础知识(DQN方面)
- ------ 比较二位数组大小-----
- ExtJs的fireEvent事件
- Delphi XE6 通过JavaScript API调用百度地图
- Utils
- webx返回json类型数据
- 使用RxBinding处理控件异步调用