厉害数
Description
数组中占比超过一半的元素称之为厉害数。给你一个长度为n的整数数组nums,找出其中的厉害数。若没有,返回
Input
第一行输入数组长度n,
第二行输入数组nums中的n个整数,
Output
输出厉害数,若不存在,则输出-1。
Sample
代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.valueOf(reader.readLine());
int nums[] = new int[n];
String s = reader.readLine();
String s1[] = s.split("\\s");
for(int i = 0;i<s1.length;i++){
nums[i] = Integer.parseInt(s1[i]);
}
System.out.println(lihai(nums));
}
public static int lihai(int nums[]){
int candidate = 0;
int count = 0;
for(int i = 0;i<nums.length;i++){
if(count==0){
candidate = nums[i];
count = 1;
} else if (nums[i]!=candidate) {
count--;
}else {
count++;
}
}
int n = 0;
for(int i= 0;i<nums.length;i++){
if(nums[i] == candidate)
n++;
}
if(2*n>nums.length){
return candidate;
}else return -1;
}
}
思路
该题主要使用投票的方法进行筛选,将相连两个不同的数字消除,可以不断进行消除,得到的数字进行最后一次判断,即可满足。