LEETCODE 169
来源:互联网 发布:最新推广软件 编辑:程序博客网 时间:2024/04/30 20:09
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.
这道题和以前看到的一个求谁发的帖子有点像。
思路:
如果有一个元素A超过了一半,那么任何情况下,去除两个不同的数字以后,A仍然超过一半。设总数为sum, A的数值为a;那么有a/sum >1/2,,即2a>sum;
第一种情况:去除的两个不包括A元素,则有总数变为sum-2,A元素个数不变,那么就有a/(sum-2)?1/2,很明显,即判断2a和sum-2的值,有2a>sum-2;
第二种情况:去除的两个有一个A元素,则有总数变为sum-2,A元素个数变为a-1,那么就有(a-1)/(sum-2)?1/2,即判断2(a-1)和sum-2的大小,即2a和sum的关系。
程序设计:
刚开始我是利用双指针,一个从前遍历,一个从后遍历,那么最差的情况即遍历N/2次就会找到,但是忽略了以下排列情况:
9 9 10 10 10 9 9
后来改变了思路,如果当前两个相等,则判断前遍历当前点和当前点后一个是否相等,如果不等,就去除当前点和当前点后一点。具体的数学证明还没有想通;
class Solution {public: int majorityElement(vector<int>& nums) { while(nums.size() > 1){bool flag = false;for (int i = 0; i < nums.size()/2; ++i){if (nums[i] != nums[nums.size() - 1 - i]){nums.erase(nums.begin()+ nums.size() - 1 - i);nums.erase(nums.begin() + i);flag = true;break;}if (nums[i] != nums[i+1]){nums.erase(nums.begin() + i + 1);nums.erase(nums.begin() + i );flag = true;break;}}if (flag == false)return nums[0];}return nums[0]; }};
0 0
- leetcode 169
- LEETCODE 169
- Leetcode 169
- leetcode 169
- leetcode 169
- Leetcode 169
- Leetcode note--Leetcode 169Majority Element
- LeetCode(169) Majority Number
- leetcode 169-Majority Element
- [leetcode 169] Majority Element
- leetCode#169 Majority Element
- leetCode 169 [PHP代码]
- Leetcode-169Majority Element
- LeetCode 169: Majority Element
- [LeetCode][169][Majority Element]
- LeetCode 169 Majority Element
- Majority Element leetcode[169]
- Leetcode[169]-Majority Element
- Java常识之-注解
- 学习笔记之--post/get/put
- c++学习笔记之拷贝
- 互联网+浪潮席卷而至 移动办公潜能无限
- 十进制转十六进制
- LEETCODE 169
- 怎样在Delphi2007中安装OCX控件
- mac系统 android studio开发 新手个人记录
- linux下的java环境配置
- 【实用软件分享01】Everything快速搜索本地文件工具
- 【笔记】我理解到的前端性能优化之14条军规
- mongodb重启失败ERROR: child process failed, exited with error number 1
- Atom: 几个常用的快捷键
- BootStrap 之 $(selector).data()