zoukankan      html  css  js  c++  java
  • 力扣 136. 只出现一次的数字

    题目:

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
    示例:
    输入: [2,2,1] 输出: 1

    方式一:

    先排序,然后两个两个遍历数组,两个数字不相等时输出,要注意奇数个时会发生数组溢出(数组越界),所以要对数组的最后进行限制,遍历到最后还没有找出的话就是最后一个。(遍历两次,耗时久)

    代码:

      public static int singleNumber(int[] nums) {
        Arrays.sort(nums);
    
        for (int i = 0; i < nums.length; i = i + 2) {
            if (i==(nums.length-1)){
                return nums[i];
            }else{
    
                if (nums[i]!=nums[i+1]){
                    return nums[i];
                }
            }
        }
        return 0;
    }
    

    方式二:异或

    异为1,同为0。异或两次相同的数字之后还是不变,与唯一单独的数字异或后得到结果。

    代码:

      public static int singleNumber(int[] nums) {
        //异或,异为1,同为0,异或两次相同之后仍旧为0,与唯一不同的异或后的得到此单独的数字
        int res=0;//标志数字出现的情况
    
        for (int i=0;i<nums.length;i++){
            res ^=nums[i];
        }
        return res;
    }
  • 相关阅读:
    +1和*2
    线段树(区间最大值和最大值的个数)
    CodeForces
    莫队算法入门(暴力而不失优雅)
    二分迷宫
    全错排公式
    C++ PAT乙 1051. 复数乘法 (15)
    C++ PAT乙 1070. 结绳(25)
    C++ PAT乙 1080. MOOC期终成绩 (25)
    C++ PAT 1073. 多选题常见计分法(20)
  • 原文地址:https://www.cnblogs.com/ghlz/p/13397602.html
Copyright © 2011-2022 走看看