找出数组中出现一半以上次数的数字
来源:互联网 发布:java基本功编程题 编辑:程序博客网 时间:2024/05/12 11:22
网上有很多关于这题的解析,目前我看到最有的解法就是计数删除法,但代码很抽象,比较难理解,下面我谈谈自己理解,主要是为了加深印象。
public int MoreThanHalfNum_Solution(int [] array) { //先检验输入是否合法,此处默认输入不合法时也输出为0 if(array.length==0||array==null) return 0; int count = 1; int res = array[0]; for(int i=1;i<array.length;i++){ if(count==0){ res = array[i]; count++; }else{ if(array[i]==res){ count++; }else{ count--; } } } if(isMoreThanHalf(array,res)) return res; return 0; //检测总次数是否超过数组长度的一半 } private boolean isMoreThanHalf(int[] arr,int res){ int count = 0; for(int i=0;i<arr.length;i++){ if(arr[i]==res) count++; } if(count*2>arr.length) return true; return false; }
计数删除法的核心是每次删除数组中不同的两个数,则数组剩下的元素中原先占据一半以上的元素不会改变,当最后只剩下一个元素的时候,就是我们想要的结果。
我们用数组{1,2,1,3,1,4,1,5,1}举例说明。首先我们定义 count = 1, res = array[0] = 1, 可以认为它表示当前待删除元素是 res= 1, 且数量是1; 接着继续遍历数组,此时count = 1, 我们需要比较下一个元素array[1] 和res 是否相等,相等的情况下,count ++,count = 2, 意味着待删除元素res存在两个,继续遍历下一个元素; 不相等的话,意味着我们找到了要删除的另外一个元素,此时 count--, 显然,属于第二种情况,我们删除了两个元素,此时 count = 0;
数组遍历到第三个元素,此时count ==0 ,表示待删除元素个数为 0 ,所以无论如何,都要把当前元素标记为待删除元素 res= arr[2] , count = 1;以此类推直至遍历结束,res 就是我们想要的结果。
过程中最重要的是对 count 的理解,它表示的是当前待删元素的个数, count==0时意味着待删除元素个数为0,所以下一个元素一定要标记为待删除元素,且令 count = 1; count!=0 时,我们需要判断下一个元素是否与待删除元素相同,相同的话,count++; 不同时表示我们找到了另外一个单删除的元素,此时可以进行删除, count--;
1 0
- 找出数组中出现一半以上次数的数字
- 找出数组中出现次数超过长度一半的数字
- 找出数组中出现次数超过一半的数字--百度
- 找出数组中出现次数超过一半的数字
- 找出数组中出现次数超过一半的数字
- 找出数组中出现次数超过一半的数字
- 0057 找出数组中出现次数超过一半的数字
- 数组中一个数字出现的次数超过了数组长度的一半,找出这个数字
- 数组中一个数字出现的次数超过了数组长度的一半,找出这个数字
- 找出数组里出现次数超过一半的数字
- 找出数组中出现次数超过数组长度一半的数字
- php算法:找出数组中出现次数超过数组长度一半的数字
- 剑指offer中找出出现次数超过一半的数字
- 找出数组中出现次数大于一半的数字 Java实现 剑指offer
- java实现找出数组中出现次数超过一半的数字
- 剑指Offer FindNumberMoreThanHalf 找出数组中出现次数超过一半的数字
- 找出数组中出现次数超过一半的数
- 算法--找出数组中出现次数超过一半的数
- es6学习--数组的扩展
- 94. Binary Tree Inorder Traversal
- JAVA接口总结
- 浅析Python的闭包和延迟绑定
- 一个很无耻的Java面试题
- 找出数组中出现一半以上次数的数字
- 基于UDP(面向无连接)的socket编程
- 代码整洁之道精华——第十二章 迭进
- NYOJ 138 找球号(二) 【Hash】
- TF-IDF
- QiYuAdmin-菜单按钮增删改查(SpringBoot实战)
- 理解立即调用函数(function(){ ...})();
- [quant-ai 002] 在ubunut 12.04上安装mongodb 3.4.3
- #bzoj2078#求树的重心