Majority Element Total Accepted: 44517 Total Submissions: 127008 My Submissions Question Solution
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.
這道題,可以使用O(1)空間和O(n)時間複雜度實現,程式如下:
public int majorityElement(int[] nums) { int count =1; int major=nums[0]; for(int i=1;i<nums.length;i++){ if(nums[i]==major){ count++; }else if(count==0){ count++; major=nums[i]; }else{ count--; } } return major; }
Majority Element II
Majority Element II Total Accepted: 302 Total Submissions: 1356 My Submissions Question Solution
Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorithm should run in linear time and in O(1) space.
這道題目的思路和上一類似,程式如下:
public List<Integer> majorityElement(int[] nums) { List<Integer> rst=new ArrayList<Integer>(); int rst1=0,rst2=0; int count1=0,count2=0; int index=0; int len=nums.length; while(index<len){ int cur=nums[index]; if(count1!=0&&cur==rst1){ count1+=1; }else if(count2!=0&&cur==rst2){ count2+=1; }else if(count1==0){ rst1=cur; count1+=1; }else if(count2==0){ rst2=cur; count2+=1; }else { count1--; count2--; } index++; } count1=0; count2=0; for(int i=0;i<len;i++){ if(nums[i]==rst1){ count1++; }else if(nums[i]==rst2){ count2++; } } if(count1>len/3){ rst.add(rst1); } if(count2>len/3){ rst.add(rst2); } return rst; }