主元素I

来源:互联网 发布:ps是什么软件 编辑:程序博客网 时间:2024/06/01 08:03

给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。
 注意事项
You may assume that the array is non-empty and the majority number always exist in the array.
样例

给出数组[1,1,1,1,2,2,2],返回 1

这里给出了3种方法

import java.util.ArrayList;import java.util.HashMap;import java.util.Map.Entry;import java.util.Scanner;/** * 主元素 给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。 注意事项You may assume that the array is non-empty and the majority number always exist in the array.样例给出数组[1,1,1,1,2,2,2],返回 1 *  * @author Dell * */public class Test46 {   public static int majorityNumber1(ArrayList<Integer> nums)   {   int result=-1;   HashMap<Integer,Integer> map=new HashMap<>();   for(int i=0;i<nums.size();i++)   {   if(!map.containsKey(nums.get(i)))   {   map.put(nums.get(i), 1);   }   else   {      map.put(nums.get(i),map.get(nums.get(i))+1);   }   }      for(Entry<Integer,Integer> e : map.entrySet())   {   if(e.getValue()>(nums.size()/2))   {   result=e.getKey();   break;   }     }return result;   }   public static int partition(ArrayList<Integer> nums, int start, int end)   {         int i=start;         int j=end;         int temp=nums.get(start);         while(i<j)         {         while(i<j&&nums.get(j)>temp) j--;         if(i<j)         {         nums.set(i, nums.get(j));         i++;         }         while(i<j&&nums.get(i)<temp) i++;          if(i<j)          {          nums.set(j, nums.get(i));          j--;          }         }         nums.set(i, temp);   return i;   }   public static int majorityNumber2(ArrayList<Integer> nums)   {     int start=0;     int end=nums.size()-1;   int index=partition(nums,start,end);   int mid=nums.size()/2;   while(index!=mid)   {   if(index>mid)   {   end=index-1;   index=partition(nums,start,end);      }   else   {   start=index+1;   index=partition(nums,start,end);     }      }   return nums.get(index);   }   public static int majorityNumber3(ArrayList<Integer> nums)   {   int result=nums.get(0);   int times=1;   for(int i=1;i<nums.size();i++)   {   if(times==0)   {   result=nums.get(i);   times=1;   }   else if(nums.get(i)==result)   times++;   else if(nums.get(i)!=result)   {   times--;   }    }      return result;      }public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();      ArrayList<Integer> list=new ArrayList<>();      for(int i=0;i<n;i++){list.add(sc.nextInt());}        System.out.println(majorityNumber3(list));        }}


原创粉丝点击