leetcode 169. Majority Element
2017-07-03 13:27
417 查看
Given an array of size n, find the majority element. The majority element is the element that appears more than
You may assume that the array is non-empty and the majority element always exist in the array.
这一题是一道锻炼思维的好题。
我用的是map方法。
package leetcode;
import java.util.HashMap;
public class Majority_Element_169 {
public int majorityElement(int[] nums) {
int n=nums.length;
HashMap<Integer, Integer> map=new HashMap<Integer, Integer>();
for(int i=0;i<n;i++){
int count=map.getOrDefault(nums[i], 0)+1;
if(count>n/2){
return nums[i];
}
map.put(nums[i],count);
}
return -1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Majority_Element_169 m=new Majority_Element_169();
int[] nums=new int[]{1,2,3,3,3};
System.out.println(m.majorityElement(nums));
}
}大神则表示,有四种方法可以解决这道题:(sorting, hashmap, moore voting, bit manipulation)。map我用了,下面展示另外三种解法。
1. sorting.
// Sorting
public int majorityElement1(int[] nums) {
Arrays.sort(nums);
return nums[nums.length/2];
}2. moore voting.
//Moore voting algorithm
public int majorityElement(int[] nums) {
int major=nums[0];
int count = 1;
for(int num:nums){
if(count==0){
count++;
major=num;
}else if(major==num){
count++;
}else{
count--;
}
}
return major;
}我下一篇博文将会详细介绍Moore's voting算法。
3. bit manipulation.
这一题跟Single Number II (leetcode problem 137)有相似之处。
对于整数的32位bit,我们可以对于32中的每一个bit位置,来遍历所有数字,得到所有数字中,这一bit位上是0占大多数还是1占大多数。如果1占大多数,那么majority element上这一位肯定是1。by follow this,我们可以用32次循环来“构造出”我们想要得到的majority element。
public int majorityElement(int[] num) {
int ret = 0;
for (int i = 0; i < 32; i++) {
int ones = 0, zeros = 0;
for (int j = 0; j < num.length; j++) {
if ((num[j] & (1 << i)) != 0) {
++ones;
}
else
++zeros;
}
if (ones > zeros)
ret |= (1 << i);
}
return ret;
}
⌊ n/2 ⌋times.
You may assume that the array is non-empty and the majority element always exist in the array.
这一题是一道锻炼思维的好题。
我用的是map方法。
package leetcode;
import java.util.HashMap;
public class Majority_Element_169 {
public int majorityElement(int[] nums) {
int n=nums.length;
HashMap<Integer, Integer> map=new HashMap<Integer, Integer>();
for(int i=0;i<n;i++){
int count=map.getOrDefault(nums[i], 0)+1;
if(count>n/2){
return nums[i];
}
map.put(nums[i],count);
}
return -1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Majority_Element_169 m=new Majority_Element_169();
int[] nums=new int[]{1,2,3,3,3};
System.out.println(m.majorityElement(nums));
}
}大神则表示,有四种方法可以解决这道题:(sorting, hashmap, moore voting, bit manipulation)。map我用了,下面展示另外三种解法。
1. sorting.
// Sorting
public int majorityElement1(int[] nums) {
Arrays.sort(nums);
return nums[nums.length/2];
}2. moore voting.
//Moore voting algorithm
public int majorityElement(int[] nums) {
int major=nums[0];
int count = 1;
for(int num:nums){
if(count==0){
count++;
major=num;
}else if(major==num){
count++;
}else{
count--;
}
}
return major;
}我下一篇博文将会详细介绍Moore's voting算法。
3. bit manipulation.
这一题跟Single Number II (leetcode problem 137)有相似之处。
对于整数的32位bit,我们可以对于32中的每一个bit位置,来遍历所有数字,得到所有数字中,这一bit位上是0占大多数还是1占大多数。如果1占大多数,那么majority element上这一位肯定是1。by follow this,我们可以用32次循环来“构造出”我们想要得到的majority element。
public int majorityElement(int[] num) {
int ret = 0;
for (int i = 0; i < 32; i++) {
int ones = 0, zeros = 0;
for (int j = 0; j < num.length; j++) {
if ((num[j] & (1 << i)) != 0) {
++ones;
}
else
++zeros;
}
if (ones > zeros)
ret |= (1 << i);
}
return ret;
}
相关文章推荐
- 【leetcode】169. Majority Element
- leetcode 169. Majority Element
- leetcode169 Majority Element
- [leetcode] 169. Majority Element
- [LeetCode] 169. Majority Element
- LeetCode--169. Majority Element (Divide-and-Conquer)
- [LeetCode][169][Majority Element]
- leetcode 169 Majority Element
- 算法分析与设计:leetcode169.Majority Element
- leetcode 169. Majority Element 摩尔投票法
- 2018.03.07 leetcode 打卡 #169. Majority Element
- LeetCode-169. Majority Element (Java)
- LeetCode 169 : Majority Element
- [leetcode] Add to List 169. Majority Element
- LeetCode 169. Majority Element
- leetcode 169. Majority Element 多数投票算法(Boyer-Moore Majority Vote algorithm)
- LeetCode:169. Majority Element
- LeetCode.169(229) Majority Element && II
- [LeetCode练习题-C语言]169. Majority Element
- 【LeetCode】169. Majority Element(Easy)解题报告