LeetCode-Majority Element
2015-10-22 21:01
375 查看
Problem:
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.
Analysis:
这个题目是要找数组中个数超过一半的元素。
思路很简单,就是给数组排序后查找。但是方法2更简单,直接返回数组最中间的数,想一想的确是这样。这就是算法题的魅力所在。
方法3是多数投票算法,思路是:
时间复杂度: O(n) — Moore投票算法: 我们维护一个当前的候选众数和一个初始为0的计数器。遍历数组时,我们看当前的元素x:
如果计数器是0, 我们将候选众数置为 x 并将计数器置为 1
如果计数器非0, 我们根据x与当前的候选众数是否相等对计数器+1或者-1
一趟之后, 当前的候选众数就是所求众数. 时间复杂度 = O(n).
Anwser1:
Anwser2:
Anwser3:
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.
Analysis:
这个题目是要找数组中个数超过一半的元素。
思路很简单,就是给数组排序后查找。但是方法2更简单,直接返回数组最中间的数,想一想的确是这样。这就是算法题的魅力所在。
方法3是多数投票算法,思路是:
时间复杂度: O(n) — Moore投票算法: 我们维护一个当前的候选众数和一个初始为0的计数器。遍历数组时,我们看当前的元素x:
如果计数器是0, 我们将候选众数置为 x 并将计数器置为 1
如果计数器非0, 我们根据x与当前的候选众数是否相等对计数器+1或者-1
一趟之后, 当前的候选众数就是所求众数. 时间复杂度 = O(n).
Anwser1:
public class Solution { public int majorityElement(int[] nums) { Arrays.sort(nums); int temp=nums[0]; int num=0; for(int i=0;i<nums.length;i++){ if(nums[i]==temp) num++; else { temp=nums[i]; num=1; } if( num> nums.length/2) return temp; } return 0; } }
Anwser2:
public int majorityElement(int[] nums) { Arrays.sort(nums); return nums[nums.length/2]; }
Anwser3:
public class Solution { public int majorityElement(int[] nums) { int count = 0, val = 1; for (int num : nums) { if (count == 0) { val = num; count = 1; } else if (num == val) count++; else count--; } return val; } }
相关文章推荐
- Memcached
- Crystal Reports --报表设计
- asp中Scripting.Dictionary字典对象使用示例
- 项目沟通管理和项目合同管理作业
- 解除树莓派USB接口供电限制
- CMake list
- Java基础--IO流
- 大数据环境部署3:Hadoop环境部署
- 跟我学Guava:基础1.4-Ordering比较器和链式排序
- Evolution的作用是什么?
- Android基于WebView的Java和JS相互调用实现步骤,附带精简可行的DEMO
- 编译到底做了什么(***.c -> ***.o的过程)
- Python学习笔记 -- 第六章 文件操作
- Objective 多态
- Java Map接口
- 循环控件
- 如何写Linux下编译驱动模块的Makefile
- 我对多线程共享内存的处理的看法
- 删除重复项
- 反思,前行之路