169. Majority Element

来源:互联网 发布:知乎话题 编辑:程序博客网 时间:2024/05/11 22:47

Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.

You may assume that the array is non-empty and the majority element always exist in the array.

问题:求数组中反复出现多次的元素(次数>n/2)

思想:同two sum类似,利用map

     public int majorityElement(int[] nums) {        if(nums.length==1) return nums[0];        int res=nums[0];       Map<Integer,Integer> map=new HashMap();       map.put(nums[0], 1);       for(int i=1;i<nums.length;i++){       if(map.containsKey(nums[i])){     //  System.out.println("nums="+nums[i]+"\ttimes="+map.get(nums[i]));     if(map.get(nums[i])+1> (nums.length-1)/2) return nums[i];     map.put(nums[i], map.get(nums[i])+1);     //System.out.println("nums="+nums[i]+"\ttimes="+map.get(nums[i]));       }       else{       map.put(nums[i], 1);       }       }       return res;    }

(2)O(n)时间复杂度,空间O(1)

  public int majorityElement2(int[] nums) {//原地  int major=nums[0];  int count=0;  for(int i=0;i<nums.length;i++){  if(count==0){  count++;  major=nums[i];  }else if(major==nums[i]){  count++;  if(count>(nums.length-1)/2) return major;  }else{  count--;  }  }  return major;  }



0 0
原创粉丝点击