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; }
这种解法是在给定数组中元素只有两个值。 如果出现三个值就不可以了
但是题目并未给出这个条件,只是在实例中体现出来了。
原文地址:https://www.cnblogs.com/c-supreme/p/9564580.html
时间: 2024-10-12 20:36:28