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;
        }

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

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

  • 相关阅读:
    We7很给力
    用Windows Media Player截图的方法
    控制IMG图片的大小缩放
    ASP.NET 2.0轻松搞定统计图表(二)
    VS2010中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法
    db2表名大小写问题
    来自Rails世界的项目管理工具Redmine
    Downloading C# ActiveX Components through CAB File(转)
    windows下借助InstantRails环境搭建redmine(转)
    JavaScript获取系统当前日期和时间、星期几
  • 原文地址:https://www.cnblogs.com/c-supreme/p/9564580.html
Copyright © 2011-2022 走看看