美文网首页
leetcode算法练习- 只出现一次的数字

leetcode算法练习- 只出现一次的数字

作者: 土豪码农 | 来源:发表于2019-03-21 08:35 被阅读0次

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

    说明:

    你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

    示例 1:

    输入: [2,2,1]
    输出: 1

    示例 2:

    输入: [4,1,2,1,2]
    输出: 4

    第一次提交

    想到的办法是先排序,然后就遍历,排序之后,(0,1),(2,3)(4,5)肯定是一样依次类推,不一样说明就找到了不重复的那个数

    var singleNumber = function(nums) {
        nums.sort();
        let num = 0;
        for (let i = 0; i < nums.length; i+=2) {
          if(i === nums.length-1){
            num = nums[i];
            break;
          }
          if(nums[i] !== nums[i+1]){
            num =  nums[i];
            break;
          }
        }
        return num;
      };
    
    QQ截图20190321080750.png

    第二次提交

    第二次提交和第一次差不多,只是第一次是一个个找,遍历,第二次用二分法尝试找找看,不过结果性能并没有优化..

      var singleNumber = function (nums) {
        nums.sort();
        return two(nums);
      };
    
      function two(nums) {
        if (nums.length === 1)return nums[0];
        let i = parseInt((nums.length - 1) / 2);
        const oddFlag = i % 2 !== 0;
        if (oddFlag) {
          if (nums[i] === nums[i - 1]) {
            nums.splice(0, i + 1);
            return two(nums);
          } else if (i === 0 || nums[i + 1] !== nums[i]) {
            return nums[i]
          } else {
            nums.splice(i , nums.length - i );
            return two(nums);
          }
        } else {
          if (nums[i] === nums[i + 1]) {
            nums.splice(0, i + 2);
            return two(nums);
          } else if (i === 0 || nums[i - 1] !== nums[i]) {
            return nums[i]
          } else {
            nums.splice(i + 1, nums.length - i - 1);
            return two(nums);
          }
        }
      }
    
    QQ截图20190321081845.png

    最佳实现

    容我细细品味

    var singleNumber = function(nums) {
        for (var i = 1; i < nums.length; i++) {
            nums[0] = nums[0] ^ nums[i];
        }
        return nums[0];
    };
    

    相关文章

      网友评论

          本文标题:leetcode算法练习- 只出现一次的数字

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