多数元素(169-java)
public class LC50_169_majorityElement {
public static int majorityElement(int[] nums) {
Map<Integer, Long> collect = Arrays.stream(nums).boxed().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
for (Map.Entry<Integer, Long> integerLongEntry : collect.entrySet()) {
if (integerLongEntry.getValue() > (nums.length / 2)) {
return integerLongEntry.getKey();
}
}
return 0;
}
public static int majorityElement2(int[] nums) {
Arrays.sort(nums);
return nums[nums.length / 2];
}
public static int majorityElementTopk(int[] nums) {
int len = (nums.length + 1) / 2;
PriorityQueue<Integer> queue = new PriorityQueue<>(len, Comparator.comparingInt(item -> -item));
for (int num : nums) {
queue.offer(num);
if (queue.size() > len) {
queue.poll();
}
}
return queue.poll();
}
public static int majorityElement摩尔(int[] nums) {
int card_num = nums[0];
int count = 1;
for (int i = 1; i < nums.length; i++) {
if (card_num == nums[i]) {
count++;
} else if (--count == 0) {
card_num = nums[i];
count = 1;
}
}
return card_num;
}
public static void main(String[] args) {
int[] nums = {2, 2, 1, 1, 1, 2, 2};
System.out.println(majorityElement摩尔(nums));
}
}