1. 程式人生 > >LeetCode Array Easy169. Majority Element

LeetCode Array Easy169. Majority Element

ble pan The tco 是否 實例 always contain ins

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

這種解法是在給定數組中元素只有兩個值。 如果出現三個值就不可以了

但是題目並未給出這個條件,只是在實例中體現出來了。

LeetCode Array Easy169. Majority Element