![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/53ffc0a54fc8b4d6eee7547d27cfb439.png)
class Solution {
public int majorityElement(int[] nums) {
Map<Integer, Integer> counter = new HashMap<>();
for (int num: nums) {
counter.put(num, counter.getOrDefault(num, 0) + 1);
if (counter.get(num) > nums.length / 2) {
return num;
}
}
return -1;
}
}
class Solution {
public int majorityElement(int[] nums) {
return quickSearch(nums, 0, nums.length - 1, nums.length / 2);
}
private int quickSearch(int[] nums, int lo, int hi, int k) {
int j = partition(nums, lo, hi);
if (j == k) {
return nums[j];
}
return j > k? quickSearch(nums, lo, j - 1, k): quickSearch(nums, j + 1, hi, k);
}
private int partition(int[] nums, int lo, int hi) {
int v = nums[lo];
int i = lo, j = hi + 1;
while (true) {
while (++i <= hi && nums[i] < v);
while (--j >= lo && nums[j] > v);
if (i >= j) {
break;
}
int t = nums[j];
nums[j] = nums[i];
nums[i] = t;
}
nums[lo] = nums[j];
nums[j] = v;
return j;
}
}