p20 数组中超过一半的数字 (leetcode 169)

一:解题思路

这道题目,有2种方法可以解决。第一种方法:循环遍历一遍数组,利用一个哈希表记录每个数字出现的次数,然后返回次数最多的那个数字。这个方法遍历了一遍数组时间复杂度为:O(n),用了一个哈希表,空间复杂度为:O(n)。

第二种方法:利用摩尔投票法。Time:O(n),Space:O(1)

二:完整代码示例 (C++版和Java版)

第一种方法:C++

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        if(nums.size()==0) return -1;
        unordered_map<int,int> hash_map;
        int maxCountValue=0;
        int maxCounts=0;

        for(int i=0;i<nums.size();i++)
        {   
            int count=hash_map[nums[i]]+1;
            hash_map[nums[i]]=count;

            if(count>maxCounts)
            {
                maxCountValue=nums[i];
                maxCounts=count;
            }
        }

        return maxCountValue;
    }
};

  

第一种方法:Java

class Solution
{
    public int majorityElement(int[] nums)
    {
           int maxValue=0,maxCount=0;

           Map<Integer,Integer> hash_map=new HashMap<>();
           
           for(int i=0;i<nums.length;i++)
           {
               int newCount=hash_map.getOrDefault(nums[i],0)+1;
               hash_map.put(nums[i],newCount);
               
               if(newCount>maxCount)
               {
                   maxCount=newCount;
                   maxValue=nums[i];
               }
           }

           return maxValue;
    }
}

第二种方法:C++

 class Solution 
 {
 public:
     int majorityElement(vector<int>& nums) 
     {
         int num = nums[0], count = 1;

         for (int i = 1; i < nums.size(); i++)
         {
             if (count == 0)
             {
                 num = nums[i];
                 count = 1;
             }
             else if (nums[i] == num)
             {
                 count++;
             }
             else
             {
                 count--;
             }
         }

         return num;
     }
 };

第二种方法:Java

class Solution 
{
    public int majorityElement(int[] nums) 
    {
          int num=nums[0],count=1;
          
          for(int i=1;i<nums.length;i++)
          {
              if(count==0)
              {
                  num=nums[i];
                  count=1;
              }
              else if(num==nums[i])
              {
                  count++;
              }
              else
              {
                  count--;
              }
          }
          
          return num;
    }
}

 

posted @ 2020-03-12 12:42  repinkply  阅读(161)  评论(0)    收藏  举报