多数元素

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

多数元素

李佳霖i   2019-11-29 我要评论

描述: 

给定一个大小为 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

输入: [3,2,3]

输出: 3

示例 2:

输入: [2,2,1,1,1,2,2]

输出: 2

思路:

这道题有很多种方法求解:

这里提供两个方法:

    1. 利用散列表,进行计数,即<数字,出现次数>,最后遍历散列表,找出出现次数大于n/2的元素。
    2. 消除法,每次遇到两个不同的数字,则将这两个数字从数组中删除。这样最后剩下的元素,一定是出现次数最多的元素。

java(方法一)

import java.util.HashMap;
import java.util.Map;

class Solution {
    public int majorityElement(int[] nums) {
        double n = Math.ceil(nums.length / 2.0);
        Map<Integer, Integer> dict = new HashMap<>(10);
        for (int num : nums) {
            if (dict.get(num) == null) {
                dict.put(num, 1);
            } else {
                dict.put(num, dict.get(num) + 1);
            }
        }
        for (Integer key : dict.keySet()) {
            if (dict.get(key) >= n) {
                return key;
            }
        }
        return -1;
    }
}

结果:

 

 python3(方法二)

class Solution:
      def majorityElement(self, nums: List[int]) -> int:
        flags = [True for num in nums]
        i = 0
        j = i + 1
        while i < len(nums):
            if flags[i]:
                while j < len(nums):
                    if nums[i] != nums[j] and flags[j]:
                        flags[i], flags[j] = False, False
                        break
                    j += 1
            i += 1
        i = 0
        while i < len(nums):
            if flags[i]:
                return nums[i]
            i += 1
        return -1

结果:

 

 

 

 

 

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们