[LeetCode]: 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.
思路:直接查找,使用arraylist记录结果,出现超过一半的数就返回
代码:
public class Solution { public static int bExist(ArrayList<int[]> nums,int intInput) { for(int i = 0;i<nums.size();i++){ if( nums.get(i)[0]== intInput){ return i; } } return -1; } public static int majorityElement(int[] nums) { ArrayList<int[]> arrResult = new ArrayList<int[]>(); for(int i = 0;i<nums.length;i++){ int intPos = bExist(arrResult,nums[i]); if( intPos == -1){ int[] arrTemp = {nums[i],0}; arrResult.add(arrTemp); } else{ arrResult.get(intPos)[1] += 1; if(arrResult.get(intPos)[1] > (nums.length/2)){ return arrResult.get(intPos)[0]; } } } int intTemp = 0; int intPos = 0; for(int i = 0;i<arrResult.size();i++ ){ if(intTemp <= arrResult.get(i)[1]){ intTemp =arrResult.get(i)[1]; intPos = i; } } return arrResult.get(intPos)[0]; } }
网上高人的思路:每找出两个不同的element,则成对删除。最终剩下的一定就是所求的。
代码:
public static int majorityElement(int[] nums) { int candidate = 0; int count = 0; for(int i = 0; i < nums.length; i ++) { if(count == 0) { candidate = nums[i]; count = 1; } else { if(nums[i] == candidate) count ++; else count --; } } return candidate; }

浙公网安备 33010602011771号