zoukankan      html  css  js  c++  java
  • 剑指 Offer 56

    I. 数组中数字出现的次数 

    解法一: 哈希表

    public int[] singleNumbers(int[] nums) {
            int[] ans = new int[2];
            Map<Integer,Boolean> map = new HashMap<>();
            for(int i = 0 ; i < nums.length ; i++)
            {
                if(!map.containsKey(nums[i]))
                {
                    map.put(nums[i],true);
                }
                else
                {
                    map.put(nums[i],false);
                }
            }
            int index = 0 ;
            for(int i = 0 ; i < nums.length ; i++)
            {
                if(map.get(nums[i]))
                {
                    ans[index] = nums[i];
                    index++;
                }
             }
             return ans;
    
    
        }

    解法二:利用异或

    public int[] singleNumbers(int[] nums) {
            int tmp =  nums[0];
            for(int i = 1 ; i < nums.length ; i++)
            {
                tmp ^= nums[i];
            }
            int divide = lowbit(tmp);
            int ans1 = 0 , ans2 = 0;
            for(int i = 0 ; i < nums.length ; i++)
            {
                if((nums[i]&divide) == 0)
                {
                    ans1 ^= nums[i];
                }
                else
                {
                    ans2 ^= nums[i];
                }
            }
            int[] ans = new int[]{ans1,ans2};
            return ans;
    
    
        }
        public int lowbit(int n)
        {
            return n & (-n);
        }

    II. 数组中数字出现的次数 II

    解法一:HashMap

    public int singleNumber(int[] nums) {
           Map<Integer,Boolean> map = new HashMap<>();
           for(int i = 0 ; i < nums.length ; i++)
           {
               if(!map.containsKey(nums[i]))
               {
                   map.put(nums[i],true);
               }
               else
               {
                   map.put(nums[i] , false);
               }
           }
           for(int i = 0 ;  i < nums.length ; i++)
           {
               if(map.get(nums[i]))
               {
                   return nums[i];
               }
           }
           return -1;
        }
  • 相关阅读:
    STL_算法_05_集合算法
    STL_算法_04_算术和生成算法
    STL_算法_03_拷贝和替换算法
    STL_算法_02_排序算法
    STL_算法_01_查找算法
    STL_容器使用时机
    STL_容器共通能力
    Qt5_选择文件对话框
    Qt5_当前exe所在路径
    Java 静态代理和动态代理
  • 原文地址:https://www.cnblogs.com/swqblog/p/13293075.html
Copyright © 2011-2022 走看看