主元素
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; }
以上是关于主元素的主要内容,如果未能解决你的问题,请参考以下文章