1. 题目描述
给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/majority-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 示例
示例 1:
输入:nums = [3,2,3]
输出:3
示例 2:
输入:nums = [2,2,1,1,1,2,2]
输出:2
提示:
n == nums.length
1 <= n <= 5 * 104
-109 <= nums[i] <= 109
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/majority-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
3. 思路
- 用个Map统计值和对应出现的次数,次数超过一半时返回。太占内存了。又慢。
- 排序后返回第n/2+1个值的方法。
- 参考别人的思路,通过出现次数来做对比。
4. 遇上的问题
在次数比较中,如果两值的出现次数相同时,需要重新复制其中一个数为新值,且新的次数。
5. 具体实现代码
map统计法
func majorityElement(nums []int) int {
target := make(map[int]int)
for i:=0; i<len(nums);i++{
target[nums[i]]++
if target[nums[i]]>(len(nums)/2){
return nums[i]
}
}
return 0
}
次数比较法
func majorityElement(nums []int) int {
target := nums[0]
count := 1
for i:=1;i<len(nums);i++{
if target != nums[i]{
count --
}else{
count++
}
if count == 0 {
target = nums[i]
count = 1
}
}
return target
}
6. 官方题解
官方提供的一种排序后再返回第n/2+1个值的方法。
class Solution {
public int majorityElement(int[] nums) {
Arrays.sort(nums);
return nums[nums.length / 2];
}
}
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/majority-element/solution/duo-shu-yuan-su-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
7 题目来源
链接: link
浅浅的过个回忆吧 ------swrici