使用Java,在快排算法的基础上,写出基于分治法的众数求解算法并给予其测试
时间: 2023-06-12 18:04:55 浏览: 97
众数是指在一个数列中出现次数最多的数,基于分治法的众数求解算法可以通过快速排序来实现。具体实现如下:
```java
public class MajorityElement {
public int majorityElement(int[] nums) {
return majorityElement(nums, 0, nums.length - 1);
}
private int majorityElement(int[] nums, int left, int right) {
if (left == right) {
return nums[left];
}
int mid = left + (right - left) / 2;
int leftMajority = majorityElement(nums, left, mid);
int rightMajority = majorityElement(nums, mid + 1, right);
if (leftMajority == rightMajority) {
return leftMajority;
}
int leftCount = countInRange(nums, leftMajority, left, right);
int rightCount = countInRange(nums, rightMajority, left, right);
return leftCount > rightCount ? leftMajority : rightMajority;
}
private int countInRange(int[] nums, int target, int left, int right) {
int count = 0;
for (int i = left; i <= right; i++) {
if (nums[i] == target) {
count++;
}
}
return count;
}
}
```
在主函数中,我们可以构造一个测试用例进行测试:
```java
public class Main {
public static void main(String[] args) {
MajorityElement solution = new MajorityElement();
int[] nums = {1, 2, 3, 2, 2, 2, 5, 4, 2};
System.out.println(solution.majorityElement(nums));
}
}
```
这个测试用例中,我们构造了一个包含9个元素的数组,其中2的出现次数最多,因此众数应该是2。运行程序后,输出结果为2,证明我们的算法实现是正确的。
阅读全文
相关推荐

















