哪个数超过了一半
思路:先排好序然后取中间哪个,你就知道是哪个超过一半了。
public class 哪个数字超过了一半 {
static void solve1(int[] arr){
Arrays.sort(arr);
System.out.println(arr[arr.length/2]);
}
public static void main(String[] args){
int arr[] = {1,2,3,4,4,3,3,3,3,3,3};
solve1(arr);
}
}
还有一种方法!
思路: 消除法,不相同的数就消除nTimes–,相同就nTimes++,如果nTimes==0,就修改新的候选键
//不同的数,进行消除,O(N)
public static void solve4(int[] arr){
//侯选数
int condidate = arr[0];
//出现的次数
int nTimes = 1;
//扫描数组
for (int i = 1; i < arr.length; i++){
//两两消减为0,应该把限制的元素作为候选键
if (nTimes == 0){
condidate = arr[i];
nTimes = 1;
continue;
}
//遇到和候选键相同的,次数加1
if(arr[i] == condidate)
nTimes++;
//不同的数,进行消减
else
nTimes--;
}
System.out.println(condidate);
}