题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
解析一:简单思维,时间复杂度为O(n2)。直接先去重,然后对每个数做记数,超过一半就输出。

import java.util.*;
public class Solution {public int MoreThanHalfNum_Solution(int [] array) {List<Integer>  list= new ArrayList<>();for(int i:array){list.add(i);}Set<Integer> set = new LinkedHashSet<>(list);//1 2 3 4 5int half =array.length/2;for(Integer i: set){int count=0;for(int j=0;j<array.length;j++){if(i==array[j]){count++;}}if(count>half){return i;}}return 0;}
}

解析二:直接先排序,然后一次搜索就可以完成任务。时间负责度为O(n)就可以完成任务

//排序前:1,2,3,2,2,2,5,4,2
//排序后:1,2,2,2,2,2,3,4,5
import java.util.*;
public class Solution {public int MoreThanHalfNum_Solution(int [] array) {Arrays.sort(array);//首先排序if(array.length==1||array.length==2){return array[0];}int count=1;int half=array.length/2;for (int i=2;i<array.length;i++){//从第3个数开始判断if(array[i]==array[i-1]){//和前一个数一样就记数count++;if(count>half){//检查要是大于一半就返回return array[i];}continue;}else {//与前面数不一样,目前新出现一次了count=1;}}return 0;//说明没有满足条件的,直接返回}
}

《剑指offer》数组中出现次数超过一半的数字相关推荐

  1. 8. 返回数组里出现次数最多的数字_剑指offer 数组中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  2. python剑指offer数组中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  3. 剑指_数组中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  4. 剑指offer39:数组中出现次数超过一半的数字

    看到这题,我第一个想法就是,设置一个哈希表,然后统计一下每个数字的出现次数就好了,不过这样需要空间消耗O(n),时间上的复杂度应该是O(n).不过这样能行吗,题目中没有给我数字范围,怎么设置数组大小呢 ...

  5. 剑指offer-数组中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  6. 【LeetCode】剑指 Offer 39. 数组中出现次数超过一半的数字

    [LeetCode]剑指 Offer 39. 数组中出现次数超过一半的数字 文章目录 [LeetCode]剑指 Offer 39. 数组中出现次数超过一半的数字 一.摩尔投票法 一.摩尔投票法 核心理 ...

  7. 剑指offer——面试题29:数组中出现次数超过一半的数字

    剑指offer--面试题29:数组中出现次数超过一半的数字 Solution1: 20180902日整理 注意几点: 1.若下一个数字和我们之前保存的数字相同,则次数 +1 2.若下一个数字和我们之前 ...

  8. 剑指 Offer 39. 数组中出现次数超过一半的数字

    剑指 Offer 39. 数组中出现次数超过一半的数字https://leetcode.cn/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban ...

  9. 剑指offer:面试题39. 数组中出现次数超过一半的数字

    题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [1, ...

  10. 《剑指offer》-- 复杂链表的复制、字符串的排列、数组中出现次数超过一半的数字、连续子数组的最大和

    一.复杂链表的复制: 参考牛客网的chancy:https://www.nowcoder.com/questionTerminal/f836b2c43afc4b35ad6adc41ec941dba 1 ...

最新文章

  1. mysql中自己定义函数编程
  2. 一问就想不起来的问题,来看看?
  3. java cv bgr2gray_CV_BGR2GRAY vs CV_GRAY2BGR | 学步园
  4. spring boot注释_Spring Boot中的@SpringBootConfiguration注释
  5. 求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}...
  6. hystrix 全局熔断_跟我学Spring Cloud(Finchley版)14Feign使用Hystrix
  7. php的yii框架配置,php配置yii框架_PHP教程
  8. Magento: 解决 Bootstrap 3 与prototype并用的时候, 下拉菜单消失的问题 Bootstrap 3 dropdown menu dis...
  9. 安装Vmware-tools时CD/DVD找不到Vmware-tools压缩包
  10. python基本函数归整
  11. Git 正在吞噬世界!
  12. 从git repo分支安装pip
  13. NYOJ4——ASCII码排序
  14. js上传文件获取文件流
  15. 企业进销存管理系统(一)
  16. 30分钟了解DNS及搭建方法
  17. python+opencv修改像素值、创建图像
  18. SECS协议的SML表示
  19. Android Studio 主题 字体
  20. 华为服务器显示乱码,本地正常 服务器乱码

热门文章

  1. Effective Java之考虑用序列化代理代理序列化实例(七十八)
  2. JavaScript的运动——弹性运动原理及案例
  3. 【最简便解法】1069 微博转发抽奖 (20分)
  4. mysql 如何删除重复的行_如何从mysql中的表中删除重复的行
  5. 小学计算机考查方案,宋家塘街道中心学校2020年理化生实验操作和信息技术考试方案...
  6. post postman 传递数组对象_PostMan Post方式传递数组数据参数 OK_go
  7. 全连接条件随机场_CRF条件随机场
  8. python中的matplotlib.pyplot_python matplotlib中axes与axis的区别?
  9. linux防火墙常用缩写,Linux iptables常用防火墙规则
  10. php课设报告致谢_PHP学生管理系统毕业论文设计.doc