每日算法----169. 多数元素----2022/12/28

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. 思路

  1. 用个Map统计值和对应出现的次数,次数超过一半时返回。太占内存了。又慢。
  2. 排序后返回第n/2+1个值的方法。
  3. 参考别人的思路,通过出现次数来做对比。

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

猜你喜欢

转载自blog.csdn.net/Srwici/article/details/128474802