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

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

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

原文地址:https://www.cnblogs.com/c-supreme/p/9564580.html

时间: 2024-10-12 20:36:28

LeetCode Array Easy169. Majority Element的相关文章

【LeetCode 229】Majority Element II

Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorithm should run in linear time and in O(1) space. 思路: [LeetCode 169]Majority Element 的拓展,这回要求的是出现次数超过三分之一次的数字咯,动动我们的大脑思考下,这样的数最多会存在几个呢,当然是2个嘛.因此,接着上一题的方

LeetCode题目:Majority Element

这同样也是一道LeetCode Online Judge上面的题目,属于easy级别,原题如下: 题目 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 alw

【LeetCode】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. 题解: Solution 1 () class

LeetCode OJ 229. Majority Element II

Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorithm should run in linear time and in O(1) space. Hint: How many majority elements could it possibly have? Do you have a better hint? Suggest it! [题目分析]

leetcode笔记: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. 二. 题目分析 题目说到,给定一个数

[LeetCode] NO. 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. [题目解析] 根据题目需要求数组中,出现次数过

(Array)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. public class Solution { //更好

【LeetCode 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. 思路: 找到一个数组中出现次数超过一半的数.排序.哈希等

Leetcode # 169, 229 Majority Element I and II

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. 这一题可以用排序之后查看序列正中间那个元素的方法来解.但