找出数组中出现次数最多的数字&找出数组中只出现一次的数字

来源:互联网 发布:c语言的编程环境 编辑:程序博客网 时间:2024/05/19 02:26

用map存储,key为数组中的元素,value为元素出现的次数,若数组中的元素都只出现了一次,则map.put(num[i],1),否则,每当检测到map中的key已经包含有数组元素时,将map中与之的value值加1,表示次数+1,最后再在map中找出value最大key,输出。

package array;import java.util.*;/* * 找出数组中出现次数最多的数字 * 思路:用一个HashMap记录每个数字出现的次数 */public class MostFrequentInArray {    public static void main(String[] args){        int [] num={1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,34,4,4,4,4,5,5,6,67,7,7,89};        System.out.print(getMostFrequent(num));//print 3    }    private static int getMostFrequent(int[] num) {        int count=1;//数字出现的次数        Map<Integer,Integer> m=new HashMap<>();        for (int i=0;i<num.length;i++){            if(m.containsKey(num[i])){                m.put(num[i],m.get(num[i])+1);            }else{                m.put(num[i],count);            }        }        int result=0;        int most=0;//找出map中出现次数最多的元素        Iterator iter=m.entrySet().iterator();        while(iter.hasNext()){            Map.Entry entry =(Map.Entry)iter.next();            int key=(Integer)entry.getKey();            int val=(Integer)entry.getValue();            if(val>most){                result=key;                most=val;            }        }        return result;    }}

对于找出数组中只出现了一次的数字来说,可以利用异或这个巧妙的办法,由于任何一个数字和自己本身异或都等于0,所以从头到尾一次异或数组中的每一个元素,那么出现两次的数字就会被全部抵消掉,最终的结果也就是所要求的只出现一次的那个数字啦。代码很简单 look

package array;/* * 找出数组中只出现了一次的数字, * 题目:一个整型数组中,除了一个数字,其他数字都出现了两次,找出这个数字,要求时间复杂度为O(n).空间复杂度为O(1) * 思路:异或运算,相同为0 不同为1 */public class FindNotDouble {    public static void main (String [] args){        int [] num={1,1,2,2,3,3,5,6,6};        System.out.print(findnotdouble(num));    }    private static int findnotdouble(int[] num) {        int result=num[0];        for (int i=1;i<num.length;++i)            result=result^num[i];            return result;    }}
0 0
原创粉丝点击