// 用一个变量和计数器辅助,变量存放当前元素的值a,计数器统计当前元素出现次数n
// 如果遇到的元素和a不一样,则n减一,如果n为零,则把a替换成遇到的元素,b设为1
// 最后的a即为要求的多数元素
class Solution {
public int majorityElement(int[] nums) {
int count = 0;
Integer candidate = null;
for (int num : nums) {
if (count == 0) {
candidate = num;
}
count += (candidate == num) ? 1 : -1;
}
return candidate;
}
}
//快排
class Solution {
public int majorityElement(int[] nums) {
fastSort(nums, 0, nums.length - 1);
return nums[nums.length / 2];
}
private void fastSort(int[] nums, int start, int end) {
int i, j, base, temp;
if (start > end) return;
i = start;
j = end;
base = nums[start];
while (i < j) {
while (i < j && base <= nums[j]) j--;
while (i < j && base >= nums[i]) i++;
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
//这里的arr[i]一定是停小于p的,经过i、j交换后i处的值一定是小于p的(j先走)
//把base放到中间位置
nums[start] = nums[i];
nums[i] = base;
fastSort(nums, start, j - 1);
fastSort(nums, j + 1, end);
}
}
leetcode169. 多数元素
最新推荐文章于 2024-07-29 10:38:42 发布