import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class MajorityNumber {
public static void main(String[] args) {
int[] nums = {2, 2, 1, 1, 1, 2, 2};
// System.out.println(majorityElement(nums));
// System.out.println(majorityElement1(nums));
System.out.println(majorityElement2(nums));
}
public static int majorityElement(int[] nums) {
// map 记录元素出现个数
Map<Integer, Integer> map = new HashMap<>();
// 统计 多数元素 满足结果
int halfLen = nums.length / 2;
for (int i = 0; i < nums.length; i++) {
int num = nums[i];
// 元素次数 初始化是1
int count = 1;
if (map.containsKey(num)) {
count = map.get(num);
count++;
}
// 判断是否是多数元素
if (count > halfLen) {
return num;
}
System.out.println(num + "元素,存储次数为" + count);
map.put(num, count);
}
return -1;
}
public static int majorityElement1(int[] nums) {
Arrays.sort(nums);
System.out.println(Arrays.toString(nums));
int halfLen = nums.length / 2;
return nums[halfLen];
}
public static int majorityElement2(int[] nums) {
// 候选人
int candidate = -1;
// 出现次数
int count = 0;
for (int i = 0; i < nums.length; i++) {
// 如果出现次数为0 重置候选人
if (count == 0) {
candidate = nums[i];
}
// 根据新元素是否等于候选人 进行次数的加减操作
if (candidate == nums[i]) {
count++;
} else {
count--;
}
System.out.println("元素" + nums[i] + ",次数" + count
+ ",候选人" + candidate);
}
return candidate;
}
}
数组4
最新推荐文章于 2024-05-26 23:54:18 发布