【问题标题】:Find majority element in an array查找数组中的多数元素
【发布时间】:2019-02-12 03:51:37
【问题描述】:

解决方案 1:没有哈希图

class Solution {
    public int majorityElement(int[] nums) {
        Arrays.sort(nums);
        return nums[(nums.length/2)];
    }
}

解决方案 2:哈希映射

class Solution {
    public int majorityElement(int[] nums) {
        for(int i:nums){
            if(hm.containsKey(i)){
                int cnt=hm.get(i);
                if(cnt+1>nums.length/2) return i;
                hm.replace(i,cnt+1);
            }
            else{
                if(1> nums.length/2) return i;
                hm.put(i,1);
            }
        }
        return -1;
    }
}

哪种解决方案更快,为什么?每个解决方案的复杂性是多少?

问题:

给定一个大小为 n 的数组,找出多数元素。多数元素是出现超过 ⌊ n/2 ⌋ 次的元素。

你可以假设数组是非空的并且多数元素总是存在于数组中。

【问题讨论】:

  • 这个问题The majority element is the element that appears more than ⌊ n/2 ⌋ times.和解决方案不匹配
  • if(1> nums.length/2) return i; 这不对...
  • 这似乎是一个家庭作业问题 - 您是否在此处阅读了关于提出家庭作业问题的部分:How do I ask and answer homework questions? 考虑到这一点,您尝试了什么或如何尝试回答您的问题解决方案的速度和复杂性?

标签: java arrays hashmap


【解决方案1】:

我认为使用HashMap 的解决方案#2 更快。

在解决方案 #1 中,您正在对整个数组进行排序,最坏情况下的复杂度约为 O(nlogn)。

在解决方案 #2 中,您只是对数组进行单次传递,因此复杂度为 O(n)。一旦你发现一个元素的数量是元素数量的一半,你甚至会破坏(返回)。尽管此解决方案可能需要一些额外的内存,但它会更快。

请注意,我忽略了containsKey()get() 等所花费的时间,因为整数密钥将提供持续的随机访问。数组元素访问也是如此,例如nums[index]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 2016-06-09
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多