一个数组,“支配者”是在数组中出现频率超过一半的整数,
例如[3,4,3,2,-1,3,3,3]数值“3”出现过5次,5除以8大于0.5
所以数值“3”是一个支配者;
而在这个数组中的支配者出现在数组下标[0,2,4,6,7]
写一个函数,在给定的整数数组中找出支配者所在的任意一个数组下标,如果一个数组中没有支配者返回-1;
例如[3,4,3,2,-1,3,3,3]数值“3”出现过5次,5除以8大于0.5
所以数值“3”是一个支配者;
而在这个数组中的支配者出现在数组下标[0,2,4,6,7]
写一个函数,在给定的整数数组中找出支配者所在的任意一个数组下标,如果一个数组中没有支配者返回-1;
- public class Test {
- public static void main(String[] args) {
- int[] array = {3,4,3,2,-1,3,3,3};
- List<Integer> list = search(array);
- for(Integer i:list){
- System.out.print(i+" ");
- }
- }
- public static List<Integer> search(int[] array){
- Map<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>();
- for(int i=0;i<array.length;i++){
- //添加出现者和其出现位置
- if(map.containsKey(array[i])){
- map.get(array[i]).add(i);
- }else{
- List<Integer> list = new ArrayList<Integer>();
- list.add(i);
- map.put(array[i], list);
- }
- }
- for(Integer i:map.keySet()){
- double percent = (double)map.get(i).size()/(double)array.length;
- if(percent>0.5){
- return map.get(i);
- }
- }
- //如果一个数组中没有支配者返回-1
- List<Integer> list = new ArrayList<Integer>();
- list.add(-1);
- return list;
- }
- }