输出超过一半的数


//输出超过一半的数,如果没有则输出-1。通过编译,bymyself
import java.util.*;
public class MoreThanHalf{
public static void main(String args[]){
int array[]={3,4,5,3,2,3};
System.out.println(moreThanHalf(array));
}
public static int moreThanHalf(int[] array){
Arrays.sort(array);
Set sets = new TreeSet();
List lists = new ArrayList();
for(int i=0; i<array.length; i++){
sets.add(String.valueOf(array[i]));//String.valueOf!!!
lists.add(String.valueOf(array[i]));
}
//转为字符串,才能使用indexOf
StringBuffer sb = new StringBuffer();
Iterator it = lists.iterator();
while(it.hasNext()){
String s = (String)it.next();
sb.append(s);
}
String ss=sb.toString();
//
it = sets.iterator();
while(it.hasNext()){
String s = (String)it.next();
int start = ss.indexOf(s);
int end = ss.lastIndexOf(s);
if(end-start+1>array.length/2){
return Integer.parseInt(s);
}
}
return -1;
}
}


//输出超过一半的数,如果没有则输出-1。通过测试
import java.util.*;
public class MoreThanHalf1{
public static void main(String args[]){
int array[]={3,4,5,3,2,3};
System.out.println(moreThanHalf(array));
}
public static int moreThanHalf(int[] array){
if(array.length==1){//当数组中只有一个数时,要输出该数
return array[0];
}
Arrays.sort(array);
int count = 1;
for(int i=0; i<array.length-1; i++){
if(array[i]==array[i+1]){
count++;
if(count>array.length/2){//不是else if
return array[i];
}
}else{
count = 1;
}
}
return -1;
}
}

输出超过一半的数,布布扣,bubuko.com

时间: 2024-11-06 21:34:01

输出超过一半的数的相关文章

28:出现次数超过一半的数

描述 给出一个含有n(0 < n <= 1000)个整数的数组,请找出其中出现次数超过一半的数. 数组中的数大于-50且小于50. 输入 第一行包含一个整数n,表示数组大小:第二行包含n个整数,分别是数组中的每个元素,相邻两个元素之间用单个空格隔开. 输出 如果存在这样的数,输出这个数:否则输出no. 样例输入 3 1 2 2 样例输出 2 来源 习题(13-6) 代码 1 #include<cstdio> 2 #include<string> 3 #include&l

Openjudge 1.13-28:出现次数超过一半的数

总时间限制:  1000ms 内存限制:  65536kB 描述 给出一个含有n(0 < n <= 1000)个整数的数组,请找出其中出现次数超过一半的数. 数组中的数大于-50且小于50. 输入 第一行包含一个整数n,表示数组大小:第二行包含n个整数,分别是数组中的每个元素,相邻两个元素之间用单个空格隔开. 输出 如果存在这样的数,输出这个数:否则输出no. 样例输入 3 1 2 2 样例输出 2还是一道水题,特水..发出来就是证明我还活着.. #include <iostream&g

求出数组中超过一半的数

Tango 是微软亚洲研究院的一个试验项目.研究院的员工和实习生们都很喜欢在 Tango上面交流灌水.传说,Tango 有一大"水王",他不但喜欢发贴,还会回复其他 ID 发的每个帖子.坊间风闻该"水王"发帖数目超过了帖子总数的一半.如果你有一个当前论坛上所有帖子(包括回帖)的列表,其中帖子作者的 ID 也在表中,你能快速找出这个传说中的 Tango 水王吗? 思路:首先想到的是一个最直接的方法,我们可以对所有 ID 进行排序.然后再扫描一遍排好序的 ID 列表,统

程序员面试题目总结--数组(三)【旋转数组的最小数字、旋转数组中查找指定数、两个排序数组所有元素中间值、数组中重复次数最多的数、数组中出现次数超过一半的数】

转!http://blog.csdn.net/dabusideqiang/article/details/38271661 11.求旋转数组的最小数字 题目:输入一个排好序的数组的一个旋转,输出旋转数组的最小元素. 分析:数组的旋转:把一个数组最开始的若干个元素搬到数组的末尾.例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1.这道题最直观的解法并不难.从头到尾遍历数组一次,就能找出最小的元素,时间复杂度显然是O(N).但这个思路没有利用输入数组

1186:出现次数超过一半的数

传送门:http://ybt.ssoier.cn:8088/problem_show.php?pid=1186 1186:出现次数超过一半的数 时间限制: 1000 ms         内存限制: 65536 KB提交数: 5616     通过数: 2614 [题目描述] 给出一个含有n(0 < n ≤ 1000)个整数的数组,请找出其中出现次数超过一半的数.数组中的数大于-50且小于50. [输入] 第一行包含一个整数n,表示数组大小: 第二行包含n个整数,分别是数组中的每个元素,相邻两个

一本通1186 出现次数超过一半的数(类似桶排序)

[题目描述] 给出一个含有n(0 < n ≤ 1000)个整数的数组,请找出其中出现次数超过一半的数.数组中的数大于-50且小于50. [输入] 第一行包含一个整数n,表示数组大小: 第二行包含n个整数,分别是数组中的每个元素,相邻两个元素之间用单个空格隔开. [输出] 如果存在这样的数,输出这个数:否则输出no. [输入样例] 3 1 2 2 [输出样例] 2 代码: #include<iostream>#include<cstdio>#include<cmath&g

在O(n)时间复杂度内找到出现超过一半的数

#include<iostream> using namespace std; bool solver(const int a[],const int n, int & num) { if(NULL == a || 0>= n) return false; ////注意,是小写~ int count = 0; int com = a[0]; for(int i = 1;i<n;i++) { if(0 == count) { com = a[i]; count++; } el

任意输入一个4位正整数,调用函数(函数自定义)输出该正整数数的各位数 字组成的最大数。

/*任意输入一个4位正整数,调用函数(函数自定义)输出该正整数数的各位数字组成的最大数.*/#include <stdio.h>int numb(int a){ int i = 0, j = 0,sum = 0, b[4]; b[0] = a%10; b[1] = a/10%10; b[2] = a/100%10; b[3] = a/1000; for (i = 0 ;i < 4; i++) { for(j = 0;j < 3 - i; j++) { if(b[j] > b[

【C语言】在全系1000个学生中,征集慈善捐款当总数达到10万的时候,停止捐款,统计人数,并输出平均捐款数

//在全系1000个学生中,征集慈善捐款当总数达到10万的时候,停止捐款,统计人数,并输出平均捐款数 #include <stdio.h> int main() { float sum=0; float amount; int count=0; int i; for(i=0;i<1000;i++) { printf("请输入捐款金额:"); scanf("%f",&amount); sum=sum+amount; count++; if(s