主元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了主元素相关的知识,希望对你有一定的参考价值。

给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。

 

1、抵消法---- 时间复杂度为O(n),空间复杂度为O(1)

  一旦发现数组中存在两个不同的数,就都删除,直到剩下的数都一样。

  此时剩下的数就是主元素。因为每次抵消操作之后,剩下来的数种,主元素一定也还是超过一半的。

public int majorityNumber(ArrayList<Integer> nums) {
    int count = 0;
    int cur = nums.get(0);
    for(int i=0; i<nums.size(); i++){
        if(count == 0){   // 重新记录
            cur = nums.get(i);
            count = 1;
        }else{  //潜在主元素
            if(cur == nums.get(i)){
                count++;
            }else{
                count--;
            }
        }
    }
    return cur;
}

 

2、用HashMap,时间、空间复杂度都是O(n)

public int majorityNumber_Map(ArrayList<Integer> nums){
    Map<Integer, Integer> map = new HashMap<>();
    for(int i=0; i<nums.size(); i++){
        int num = nums.get(i);
        if(map.containsKey(num)){
            map.put(num, map.get(num)+1);
        }else {
            map.put(num, 1);
        }
        if(map.get(num)>nums.size()/2){
            return num;
        }
    }
    return 0;
}

 

以上是关于主元素的主要内容,如果未能解决你的问题,请参考以下文章

共享元素转换在父片段和子片段之间不起作用(嵌套片段)

如何在主活动中正确检索片段中的视图

VSCode自定义代码片段5——HTML元素结构

VSCode自定义代码片段5——HTML元素结构

VSCode自定义代码片段5——HTML元素结构

CSS代码片段