zoukankan      html  css  js  c++  java
  • LeetCode Array Easy169. Majority Element

     Description

    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.

    Example 1:

    Input: [3,2,3]
    Output: 3

    Example 2:

    Input: [2,2,1,1,1,2,2]
    Output: 2

     问题描述: 给定一个非空数组,找到出现次数最多的元素 超过N/2次

    思路: 用最简单粗暴的方法,遍历数组,将每个元素出现的次数和元素作为键值对的形式保存起来,最后再遍历键值对,找出出现次数最多的元素。

    代码:

    public static int MajorityElement(int[] nums)
            {
                Dictionary<int, int> dics = new Dictionary<int, int>();
                int result = int.MinValue;
                int maxCount = 0;
                for (int i = 0; i < nums.Length; i++)
                {
                    if(dics.ContainsKey(nums[i]))
                    {
                        dics[nums[i]] = dics[nums[i]] + 1;
                    }
                    else
                    {
                        dics.Add(nums[i], 1);
                    }
                }
                foreach (KeyValuePair<int,int> item in dics)
                {
                    if (item.Value > maxCount)
                    {
                        result = item.Key;
                        maxCount = item.Value;
                    }
                        
                }
                return result;
            }

    但是这种解法用到的键值对,思考是否有更好的解法,看了别人的解法。更为简单和简洁。思路就是假设第一个元素为多数元素,遍历数组,如果下一个元素和多数元素相同,则数量加一,如果不想等,数量减一,如果count==0 则修改多数元素为当前元素。

    下面是代码。

    public int MajorityElement(int[] nums) {
            int majority = nums[0], count = 1;
            for (int i=1; i<nums.Length; i++)
            {
                if (count == 0)
                {
                    count++;
                    majority = nums[i];
                }
                else if (majority == nums[i])
                {
                    count++;
                }
                else
                    count--;
            }
            
            return majority;
        }

    这种解法是在给定数组中元素只有两个值。 如果出现三个值就不可以了

    但是题目并未给出这个条件,只是在实例中体现出来了。

  • 相关阅读:
    U盘安装Ubuntu 14.04 LTS
    VS2013配置OPENCV2.4.9(OPENCV3.X)
    make、makefile、cmake、qmake对比
    Google C++ Style
    Ubuntu16.04搜狗输入法无法输入中文
    Ubuntu16.04安装使用wineqq
    Ubuntu卸载软件
    [机器学习入门篇]-梯度下降法
    [机器学习入门篇]-正则化
    2014年度最受好评的十佳工具
  • 原文地址:https://www.cnblogs.com/c-supreme/p/9564580.html
Copyright © 2011-2022 走看看