zoukankan      html  css  js  c++  java
  • 数组中数字出现的次数

    image-20200428213419845

    第一次解题思路:

    • 遍历数组,将数字和出现的次数装到map集合
    • 遍历map集合,取到题目要求值 (其实不能用Map(空间复杂度O(n)))
    public int[] singleNumbers(int[] nums) {
            Map<Integer,Integer> map=new HashMap<>();
            for(int num:nums){
                if(map.containsKey(num)){
                    map.put(num,map.get(num)+1);
                }else{
                    map.put(num, 1);
                }
            }
            int [] ans=new int[2];
            int count=0;
            for(Map.Entry<Integer,Integer>entry:map.entrySet()){
                if(entry.getValue()==1){
                    ans[count++]=entry.getKey();
                }
            }
            return ans;
       }
    

    image-20200428213248614

    优化

    解题思路:分组位运算

    ​ 题目要求时间复杂度O(n),空间复杂度为O(1),因此不能用map(空间复杂度O(n))

    image-20200428223314246

    代码如下:

    //使用分组位运算
        public int[] singleNumbers3(int[] nums) {
           //因为只有两个数出现一次,数组全部元素进行异或运算的值 等同于 这个两个元素异或运算的值
            int k=0;
            for(int num:nums){
                k^=num;
            }
    
            //两个数异或值不等于0 说明什么?说明这两个数不同 那这两个数在哪一位不同 对应位的异或值为1的地方不同
            //两个不同的数异或运算的结果 k  对k从低位往高位寻找 两个数某位不同的所在位置  (即k从最低位开始 首次出现'1'的位置)
            //找到区分值,就可以将这两个数 分到 两个不同分组
            int first=1;
            while((first&k)==0){
                first<<=1;
            }
            //0跟数异或等于数本身  相同数异或等于0
            //在各自分组中  只有一个数出现了一次  其他数都出现两次 
            //各个分组 各自异或运算 结果值为  只出现过一次的数
            int a=0;
            int b=0;
            for(int num:nums){
                if((num&first)==0){
                    a^=num;
                }else{
                    b^=num;
                }
            }
            return new int[]{a,b};
        }
    

    image-20200428221208566

  • 相关阅读:
    怎么让图片居中显示?
    上传代码出现弹出框“请确保已在git中配置您的user.name和user.email”解决方法
    window.open()下载文件: 在当前页面打开方法
    修改网站颜色为黑白 (100% 灰度)/全页置灰
    ZMQ简单使用
    CCXT
    Python描述符详解
    自定义序列的修改、散列和切片
    使用__slots__类属性节省空间
    QGraphicsView实现虚拟摇杆
  • 原文地址:https://www.cnblogs.com/yh-simon/p/12818844.html
Copyright © 2011-2022 走看看