• LeetCode刷题记录(3)—— 136. 只出现一次的数字


    class Solution {
        public int singleNumber(int[] nums) {
            /*思路一:利用HashSet去除重复项(o(n))
            Set<Integer> set=new HashSet<>();
            for(int i=0;i<nums.length;i++){
                if(!set.contains(nums[i])){
                    set.add(nums[i]);
                }else{
                    set.remove(nums[i]);
                }
            }
            int res=(int)set.toArray()[0];
            return res;*/
    //思路二:先排序然后左右比较(o(logn)) /*if(nums.length==1) return nums[0]; Arrays.sort(nums); if(nums[0]!=nums[1]) return nums[0]; for(int i=1;i<nums.length-1;i++){ if(nums[i]!=nums[i-1]&&nums[i]!=nums[i+1]) return nums[i]; } return nums[nums.length-1];*/
         //思路三:位运算(XOR异或)(o(n))
         
    //1、交换律:a ^ b ^ c <=> a ^ c ^ b
         //2、任何数于0异或为任何数 0 ^ n => n
         //3、相同的数异或为0: n ^ n => 0
            int result = 0;
            for(int i=0;i<nums.length;i++)
            {
               result^=nums[i];
            }
            return result;
        }
    }
  • 相关阅读:
    Tarjan-割点&桥&双连通
    树状数组
    loli的搜索测试-5
    思维题
    生成树
    贪心
    loli的搜索测试-4
    树链剖分
    基于AHK的上课自动签到
    用列表实现栈
  • 原文地址:https://www.cnblogs.com/esperanza/p/12171177.html
Copyright © 2020-2023  润新知