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;
}