LeetCode Array Easy169. Majority Element
阿新 • • 發佈:2018-08-31
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: 3Example 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