package 排序案例;
public class ExceedHalf1 { // 找水王也就是数组中刚好出现一半的那个数和超过一半的那个题目的思路类似
public static int exceed(int[] arr) {
if(arr.length < 3) {
return arr[0];
}
int num = arr[0];
int time = 1;
int count = num == arr[arr.length - 1] ? 1 : 0;
for(int i = 1; i < arr.length; i++) {
if(num == arr[i]) {
time++;
}else if(time == 0) { // 如果第二个元素和第一个不相同time--然后i++然后和第三个元素但num始终没有变化就相当于直接跳过了第二个元素
num = arr[i]; // 非常巧其实这就是coding能力要准确把握关键的变量 不要写一些没有用的变量就是只要这个变量变化其他的跟着变化就可以了
time = 1;
}else {
time--;
}
if(arr[i] == arr[arr.length - 1]) {
count++;
}
}
if(count == arr.length / 2) {
// 因为刚好个数刚好满足一半那么数组中数的排列情况也只有几种比较特殊
// 1 2 3 2 4 2 还有 2 1 2 3 2 4 就和最后一个元素比较如果相同count就++如果最后的元素刚好就是
// 水王的话count就=arr.length/2不然就等于num
System.out.println(arr[arr.length - 1]);
}else {
System.out.println(num);
}
return num;
}
public static void main(String[] args) {
int[] arr = {1, 1, 4, 4, 2, 2, 2, 2};
exceed(arr);
}
}
网友评论