找出整数数组中出现次数超过数组长度一半的元素(Java)
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)的更多相关文章
- 《剑指offer》数组中出现次数超过数组长度一半的数字
题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如 ...
- 【剑指offer】数组中出现次数超过数组长度一半的数字,C++实现
原创博文,转载请注明出处! # 题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过 ...
- [PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法
问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 c ...
- 28.数组中出现次数超过长度一半的数字(python)
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 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 ...
- 如何在O(n)的时间复杂度内找出数组中出现次数超过了一半的数
方法一:每次取出两个不同的数,剩下的数字中重复出现次数超过一半的数字肯定,将规模缩小化.如果每次删除两个不同的数,这里当然不是真的把它们踢出数组,而是对于候选数来说,出现次数减一,对于其他数来说,循环 ...
- 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 ...
- python 找出一篇文章中出现次数最多的10个单词
#!/usr/bin/python #Filename: readlinepy.py import sys,re urldir=r"C:\python27\a.txt" disto ...
- 找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数 #include<iostream>using namespace s ...
随机推荐
- C结构体struct 和 共用体union的使用测试
#include <stdio.h> struct { char name[10]; char sex; char job; int num; union{ //联合只能共用同一个内存 i ...
- 问题--Notepad++保存文件遇到Failed to save file
一.问题如下 使用Notepad编码,保存时遇到问题:Failed to save file. Not enough space on disk to save file? 如下图所示: 二.解决方法 ...
- AtCoder Grand Contest 019 题解
传送门 \(A\) 咕咕 int a,b,c,d,n,t; int main(){ scanf("%d%d%d%d%d",&a,&b,&c,&d,& ...
- java连数据库和数据库连接池踩坑日记(二)-------数据库连接池c3p0
关于数据库连接池,我觉得有些沮丧,因为最后被毙掉了说不用考虑多线程的问题…… 数据库连接池的推荐:https://www.cnblogs.com/nuccch/p/8120349.html 我最终选择 ...
- 描述yeild作用
保存当前运行状态(断点),然后暂停执行,即将函数挂起 将yeild关键字后面表达式的值作为返回值返回,此时可以理解为起到了return的作用,当使用next().send()函数让函数从断点处继续执行 ...
- sql转码
select bzj, sqid, zcslh, qymc, ...
- OGC open geospatial consortium标准服务
数据共享作为GIS行业的基础,是每一位从事GIS相关领域人员必须要了解的知识,而OGC服务作为行业标准,已经被各大GIS厂商广泛应用.究竟什么是OGC呢? OGC全称——开放地理空间信息联盟(Open ...
- java项目代码上线
java项目代码上线 1:java项目代码上线架构图 ip地址及主机名规划 10.0.0.11 deploy 10.0.0.12 tomcat-web01 10.0.0.13 git.oldboy ...
- mybatis pagehelper 分页 失效
pagehelper 不分页几种情况的解决方法 - web洋仔 - CSDN博客https://blog.csdn.net/csdn___lyy/article/details/77160488 分页 ...
- FineReport 交叉报表
交叉报表 - FineReport报表官网http://www.finereport.com/knowledge/professional/crossreport.html FineReport--- ...