169. 多数元素
AI-摘要
CaiCai GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
本文最后更新于 2024-07-03,文章内容可能已经过时。
func majorityElement(nums []int) int {
n := len(nums) / 2
ans, count := 0, 0
nums2 := make(map[int]int, n)
for _, v := range nums {
nums2[v]++
if nums2[v] > count {
count = nums2[v]
ans = v
}
}
return ans
}
/**
* 80. 删除有序数组中的重复项 II
*/
public int majorityElement(int[] nums) {
Map<Integer, Integer> map = new HashMap<>();
int count = nums.length / 2;
int ans = 0;
for (int num : nums) {
map.put(num, map.getOrDefault(num, 0) + 1);
if (map.get(num) > count) {
count = map.get(num);
ans = num;
}
}
return ans;
}
java 快排解法:
class Solution {
int[] nums;
public int majorityElement(int[] nums) {
this.nums = nums; // 将输入数组赋给类成员变量 nums
int n = nums.length;
return qs(0, n - 1, (n + 1) / 2); // 调用快速选择算法找出第 (n+1)/2 大的元素
}
private int qs(int l, int r, int k) {
if (l >= r) {
return nums[l];
}
int x = nums[(l + r) / 2]; // 选择中间元素作为基准元素 x
int i = l - 1, j = r + 1;
while (i < j) {
do
i++;
while (nums[i] < x); // 找到第一个大于等于 x 的元素索引 i
do
j--;
while (nums[j] > x); // 找到第一个小于等于 x 的元素索引 j
if (i < j) {
int t = nums[i]; // 交换 nums[i] 和 nums[j]
nums[i] = nums[j];
nums[j] = t;
}
}
int cnt = j - l + 1; // 计算在当前划分后,基准元素 x 的左侧有多少个元素
if (cnt >= k)
return qs(l, j, k); // 如果左侧元素个数大于等于 k,则继续在左侧递归查找
return qs(j + 1, r, k - cnt); // 否则在右侧继续查找第 k-cnt 大的元素
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 caicaiBlog
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果