LeetCode 多数元素

人盡茶涼 提交于 2020-03-17 12:42:29

在这里插入图片描述

解法一:将所有元素放入HashMap中,利用HashMap中的键的唯一性,将重复元素对应的值value+1,当获取到全部元素后,遍历HashMap的键获取出最符合条件的那一个元素

public static int majorityElement1(int[] nums) {
     //key为nums元素, value为元素的个数
     Map<Integer,Integer> map = new HashMap<Integer,Integer>();

     for(int num :nums){
         if(map.get(num) != null){
             //包含这个元素,给 value值加1
             map.put(num, map.get(num)+1);
         }else{
             map.put(num,1);
         }
     }

     //获取value最大的元素
    for(Integer key : map.keySet()){
         if(map.get(key) > (nums.length/2)){
             return key;
         }
     }
     return -1;
 }

解法二:剔除元素法,

  1. 设置两个变量,1 是数组的多数元素候选 numH,并将其初始化为数组的第一个元素,2 是设计一个计数器count 并初始为 1。
  2. 遍历数组,将数组中的元素与 numH 进行比较,
    1. 若二者相同,则 count++
    2. 若不相同,则 count - -,- -的操作会使得 numH 避开数组中的那些少数元素
    3. 在 - - 前应该先判断此时的 count 是否为 0
      1. 若count == 0 ,则意味着数组中前面不相同的元素已经跳过了,所以要重置count与numH,重复前面的操作,知道数组遍历完,此时剩下的numH就是我们要的值。
      2. 若count != 0,则进行–
 public static int majorityElement(int[] nums) {
      //将数组的第一个数设为多数元素候选值
     int numH = nums[0];
     //设置一个计数器 count=1;
     int count = 1;
		
	//循环比较
     for(int i = 1; i<nums.length ;i++){
         //判断多数元素候选值与下一个元素是否相等
         if(numH == nums[i]){
             //是,count++;
             count++;
         }else{
             // 否,先判断count == 0
             if(count == 0){
                 // 是将这两个元素从数组中删除,并重置数据
                 count = 1;
                 numH = nums[i];
             }else{
                 //否,count--;
                 count--;
             }
         }
     }

     //返回多数元素候选值
     return numH;
 }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!