java. 输入一个长度为n (n > 0)的整数数组,并找到其中的“多数元素”。“多数元素”是指在数组中出现超过n/2次的元素。假设给定数组中总是存在多数元素
时间: 2024-10-14 15:13:41 浏览: 28
数据结构(JAVA)求一个含有n个整数元素的数组a0..n-1中的最大元素
在Java中,寻找数组中的“多数元素”可以使用 Boyer-Moore Voting Algorithm 或者称为 “多数元素算法”。这是一种简单的线性时间复杂度解决方案,步骤大致如下:
1. 初始化两个变量 `candidate` 和 `count`,分别代表当前的候选元素和计数,初始值设为数组的第一个元素。
2. 遍历整个数组,对于每个元素:
- 如果元素等于 `candidate`,则增加 `count`。
- 否则,如果 `count` 为 0,则将当前元素赋值给 `candidate` 并设置 `count` 为 1。
- 如果 `count` 不等于 0,则减少 `count`。
3. 遍历结束后,`candidate` 就是多数元素。因为如果有超过 n/2 的元素出现次数大于其他元素,`count` 在遍历时不可能减到 0。
以下是简单的Java代码实现:
```java
import java.util.Scanner;
public class MajorityElement {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数组长度:");
int n = scanner.nextInt();
// 假设输入的是整数数组
Integer[] arr = new Integer[n];
System.out.println("请输入数组元素 (空格分隔):");
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
findMajority(arr);
}
private static void findMajority(Integer[] nums) {
if (nums.length == 0) {
return;
}
int candidate = nums[0], count = 1;
for (int num : nums) {
if (num == candidate) {
count++;
} else {
count--;
if (count == 0) {
candidate = num;
count = 1;
}
}
}
System.out.printf("多数元素是:%d\n", candidate);
}
}
```
阅读全文