[leetcode] 169. Majority Element
来源:互联网 发布:如果注册域名 编辑:程序博客网 时间:2024/06/07 08:07
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.
题意:
给定一个大小n的数组,查找大多数元素。大多数元素是在数组中出现超过⌊n / 2⌋次的元素。
您可以假定数组是非空的,而数组中的大多数元素总是存在的。
方法一
思路:
利用hashmap的思想,键用来存储元素的,值用来存储元素出现的次数,然后遍历map取出值最大的那个元素就是出现次数超过n/2的元素。代码如下:
class Solution {public: int majorityElement(vector<int>& nums) { map<int,int> count; int n=nums.size(); int sz=n/2; for (int i=0;i<n;++i) { if (count[nums[i]]) { count[nums[i]]++ ; } else count[nums[i]]=1; } for (auto iam=count.begin();iam!=count.end();++iam) { if ((iam->second)>sz) { return iam->first; } } }};
方法二
思路:
这个方法的效率更高一些,它是利用遍历一次,计数查找元素,不像方法一,需要两次遍历才能找到关键元素。此方法的关键就是利用realVal来记录当前出现元素的值,并且counts来记录此元素出现的次数,向后遍历当遇见和realVal值不相同的时候counts–,相同的时候counts++,如果counts==0的时候说明相同元素和其他元素出现次数相同,更新realVal的值。要查找的元素的个数超过数组总数的n/2,所以最后realVal的值就是出现次数做多的元素。代码如下:
class Solution {public: int majorityElement(vector<int>& nums) { int realVal = 0; int counts = 0; for(int i =0;i<nums.size();i++){ if(counts==0){ realVal = nums[i]; counts = 1; } else{ if(realVal==nums[i]) counts++; else counts--; } } return realVal; }};
0 0
- [LeetCode]169.Majority Element
- LeetCode 169.Majority Element
- 【LeetCode】169.Majority Element
- LeetCode 169. Majority Element
- LeetCode 169. Majority Element
- [leetcode] 169.Majority Element
- Leetcode 169. Majority Element
- 【LeetCode】169. Majority Element
- [LeetCode]169. Majority Element
- 169. Majority Element LeetCode
- LeetCode 169. Majority Element
- LeetCode 169. Majority Element
- Leetcode 169. Majority Element
- [LeetCode]169. Majority Element
- 【LeetCode】169. Majority Element
- leetcode 169. Majority Element
- leetcode 169. Majority Element
- [leetcode] 169. Majority Element
- UITextVewDelegate
- 数据结构及算法
- Visual Assist X Options 注释设置-类
- objective-c代码转c++代码,了解底层实现机制
- 欢迎使用CSDN-markdown编辑器
- [leetcode] 169. Majority Element
- linux下mysql数据源码装与卸载
- 9月2号模拟总结
- 菜鸟学习物联网---辨析基于Andriod 5.1,Linux,Windows10开发Dragon Board 410c板
- SQL之树形结构无限级联删除(转)
- 线程的并发所引起的问题
- MySql常用代码行
- 屌丝学arm汇编-05-编译器如何利用pc指针生成PIC(位置无关码)
- 292. Nim Game