Majority Element

  package zsz.develop;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;
/**
 * 169. Majority Element 
  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.
  
  169。大多数元素
  给定一个大小n的数组,查找大多数元素。大多数元素是出现超过⌊N / 2⌋倍元。
  您可以假定数组是非空的,而数组中的大多数元素都是存在的。
 * @author zhangshengzhong
 *
 */
public class MajorityElement {

 public static void main(String[] args) {
  int[] nums = {1,1,1,1,1,2,3,4,5};
  int majorityElementMyOne = majorityElementMyOne(nums);
  System.err.println(">>>>>"+ majorityElementMyOne);
 }
// /**
//  * 不知为何编译错误,忽略
//  * @param nums
//  * @return
//  */
// public static int majorityElementMyOne(int[] nums) {
//  HashMap map = new HashMap<>();
//  for (int i = 0; i < nums.length; i++) {
//   if (map.containsKey(nums[i])) {
//    Integer iCount = map.get(nums[i]);
//    map.put(nums[i], iCount+1);
//   }else {
//    map.put(nums[i], 1);
//   }
//  }
//  
//  Set> entrySet = map.entrySet();
//  Iterator> iterator = entrySet.iterator();
//  if (iterator.hasNext()) {
//   Entry next = iterator.next();
//   Integer conut = next.getValue();
//   if (conut>(nums.length/2)) {
//    return next.getKey();
//   }
//  }
//  return -1; }
// 
 
 /**
  * 这个思路厉害了,题目已经给出了说会大于一半了。
  * 那我们先给她排序一下,取出中间的数不就结了
  * @param nums
  * @return
  */
 public int majorityElemenOtherOne(int[] nums) {
     Arrays.sort(nums);
     return nums[nums.length / 2];
 }
 
 
 /**
  * 看不太懂,我觉得他是错误的解法,但运行结果竟然是正确的
  * 问题就出在数量大于一半,所以count 总会等于正确时的数
  * @param nums
  * @return
  */
 public static int majorityElementOtherTwo(int[] nums) {
        int res=nums[0], count=1;
        for(int i=1;i= half && val > max){
              max = val;
              maxKey = key;
          }
      }
      return maxKey;
  }

}

github代码

你可能感兴趣的:(Majority Element)