数组中的元素,大部分都出现了2次,只要1个出现了1次,把这2个找出来

e02fdb54d7524710a7d664d082bb7811 

 

牵涉到数组的题目,可以先排序,是个妙招啊


/*数组中的元素,大部分都出现了2次,只要1个出现了1次,把这2个找出来*/


    // 解法1 : 用map, 主要是containsKey的方法的使用,不过要遍历两次

    public static int shuzu(int[]a){


HashMap<Integer,Integer> s= new HashMap();


  for(int i:a){

      if(s.containsKey(i)){

          int value=s.get(i);
          s.put(i,value+1);

      }
  }

        for(int i:a){

            if(s.get(i)==1){

                return i;



            };
        }

        return -1;




    }
    /*
    * 、Arrays.sort 数组排序
2、使用栈进行从小到大入栈,一样的则弹出,不一样则入栈
3、取栈中剩余的元素
    * 
    * */
    public static int shuzu2(int[]a){

      Arrays.sort(a); //返回的是void,因为是在a数组本身上改的,没有new新数组

        Stack<Integer> s=new Stack();


        for(int i:a){
            if(s.isEmpty()|| i!=s.peek()){

                s.push(i);
            }else{


                s.pop();
            }

    s.pop();

        }





    }

数组中一串数,比如 1 2 4 4    4 4 4 4 , 共8个数, 4 出现的次数查过了一半,把4 找出来,没有超过一半的数,返回0(超过一半的只能有1个啊)
还是先排序

public static int half(int[]array){
    Arrays.sort(array);
    int length=array.length/2;
    for(int i=0;i<length;i++){
        if(array[i]==array[i+length]){
            return array[i];

        }


    }

    return 0;



}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值