美文网首页
只出现一次的数字

只出现一次的数字

作者: Zhang小二 | 来源:发表于2019-04-21 14:16 被阅读0次

    题目描述

    解答

    1、暴力解答,每个元素均遍历一次数组,判断该元素是否在数组中两次出现,算法复杂度O(n2)。

       public int singleNumber(int[] nums) {
            int retnum = 0;
            for(int i=0; i<nums.length; i++) {
                boolean eq = false;
                for(int j=0; j<nums.length; j++) {
                    if(i != j && nums[i] == nums[j]) {
                        eq = true;
                    }
                }
                if(!eq) {
                    retnum = nums[i];
                    break;
                }
            }
            return retnum;
        }
    

    2、将数组排序后,隔跳判断,若当前元素与下一个元素不相同,则只出现一次的数字并为当前数字,算法复杂度为排序算法的复杂度。

        public int singleNumber2(int[] nums) {
            int retnum = 0;
            Arrays.sort(nums);
            for(int i=0; i<nums.length; i+=2) {
                if(i == nums.length -1 || nums[i] != nums[i+1]) {
                    retnum = nums[i];
                    break;
                }
            }
            return retnum;
        }
    

    3、异或,对同一个数字两次异或,结果仍为原值,算法复杂度O(n)。

    class Solution {
        public int singleNumber(int[] nums) {
            int retnum = 0;
            for(int num: nums) {
                retnum = retnum ^ num;
            }
            return retnum;
        }
    }
    

    效果:

    image.png

    相关文章

      网友评论

          本文标题:只出现一次的数字

          本文链接:https://www.haomeiwen.com/subject/erjwwqtx.html