Question:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字

package com.study.zhipengs.test;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map; /**
* 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
* 例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4,
* 2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.
*
* 所有数字的个数均没有超过数组长度的一半,则返回-1
*
* @author zhipegs
*
*/
public class Test { public static void main(String[] args) {
int[] numbers = { 1, 2, 2, 5, 6, 2, 5, 2, 2};
System.out.println("number: " + mapSolve(numbers));
System.out.println("number: " + sortSolve(numbers));
} /**
* 先排序---排序后统计每个数字出现的次数,出现次数超过数组长度一半的那个一定出现在中间
* @param numbers
* @return int
*/
private static int sortSolve(int[] numbers) {
Arrays.sort(numbers);
int count = 0;
int len = numbers.length;
int pos = (int) Math.rint((double)len/2.0);
int midValue = numbers[pos];
for(int i=0;i<len;i++) {
if(numbers[i] == midValue) {
count ++;
if(count > pos) {
return midValue;
}
}
}
return -1;
} /**
* 不排序--相同数字存储到Map的key中,个数在value中递增计算
* @param numbers
* @return int
*/
private static int mapSolve(int[] numbers) {
int len = numbers.length;
int pos = (int) Math.rint((double)len/2.0);
Map<String,MyInteger> map = new HashMap<String,MyInteger>();
MyInteger mi;
for(int i=0;i<numbers.length;i++) {
String key = numbers[i]+"";
mi = map.get(key);
if(mi != null) {
int value = mi.get()+1;
mi.set(value);
map.put(key, mi);
if(value > pos) {
return numbers[i];
}
continue;
}
mi = new MyInteger();
mi.set(1);
map.put(key, mi);
}
return -1;
} } /**
* 自定义MyInteger
*/
class MyInteger {
private int value; public void set(int value) {
this.value = value;
} public int get() {
return this.value;
} @Override
public String toString() {
return "MyInteger [value=" + value + "]";
}
}

总结:多看书和博客,从别人的代码分享中理解思路,越思越明~~

找出整数数组中出现次数超过数组长度一半的元素(Java)的更多相关文章

  1. 《剑指offer》数组中出现次数超过数组长度一半的数字

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

  2. 【剑指offer】数组中出现次数超过数组长度一半的数字,C++实现

    原创博文,转载请注明出处! # 题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过 ...

  3. [PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法

    问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 c ...

  4. 28.数组中出现次数超过长度一半的数字(python)

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

  5. LeetCode 5126. 有序数组中出现次数超过25%的元素 Element Appearing More Than 25% In Sorted Array

    地址 https://leetcode-cn.com/contest/biweekly-contest-15/problems/element-appearing-more-than-25-in-so ...

  6. 如何在O(n)的时间复杂度内找出数组中出现次数超过了一半的数

    方法一:每次取出两个不同的数,剩下的数字中重复出现次数超过一半的数字肯定,将规模缩小化.如果每次删除两个不同的数,这里当然不是真的把它们踢出数组,而是对于候选数来说,出现次数减一,对于其他数来说,循环 ...

  7. 229. Majority Element II -- 找出数组中出现次数超过 ⌊ n/3 ⌋ 次的数

    Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorit ...

  8. python 找出一篇文章中出现次数最多的10个单词

    #!/usr/bin/python #Filename: readlinepy.py import sys,re urldir=r"C:\python27\a.txt" disto ...

  9. 找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数

    找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数 #include<iostream>using namespace s ...

随机推荐

  1. 【概率论】5-9:多项式分布(The Multinomial Distributions)

    title: [概率论]5-9:多项式分布(The Multinomial Distributions) categories: - Mathematic - Probability keywords ...

  2. zabbix 内置key说明

    原文参考:https://blog.csdn.net/whs_321/article/details/52939263 一.简介 Zabbix 内置了很多丰富的key,使得我们在添加linux os模 ...

  3. Nginx 所使用的 epoll 模型是什么?

    对于 Nginx,相信有过 Web 服务部署经验的同学都不陌生,它有以下特点: 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 相较于 A ...

  4. Ubuntu16.04 RYU pip命令安装

    pip命令安装方法 sudo apt install gcc python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev zlib1g-dev ...

  5. 微信小程序实现左侧滑栏

    前言 一直想给项目中的小程序设置侧滑栏,将退出按钮放到侧滑中,但是小程序没有提供相应的控件和API,因此只能自己手动实现,网上很多大神造的轮子很不错,本文就在是站在巨人的肩膀上实现. 效果 先看看效果 ...

  6. Spring boot 去除URL 里的 JSESSIONID

    方法一 application.yml 里设置 server: port: 80 servlet: session: tracking-modes: cookie cookie: http-only: ...

  7. 深度学习面试题16:小卷积核级联卷积VS大卷积核卷积

    目录 感受野 多个小卷积核连续卷积和单个大卷积核卷积的作用相同 小卷积核的优势 参考资料 感受野 在卷积神经网络中,感受野(Receptive Field)的定义是卷积神经网络每一层输出的特征图(fe ...

  8. Visual C++2010的使用

    Tools->Settings>Rest... 还原所有设置 运行程序:"D:\Program Files\VCExpress\Install\Microsoft Visual ...

  9. laravel打印sql所执行的原生语句

    DB::listen(function($sql) { foreach ($sql->bindings as $i => $binding) { if ($binding instance ...

  10. PDF生成类库

    from:https://blog.csdn.net/plean/article/details/8097015 最近忙了两个星期的任务了     iTextSharp.dll是个开源的用于生成pdf ...