美文网首页数据解构和算法
56.有序数组中的单一元素

56.有序数组中的单一元素

作者: wo不是黄蓉 | 来源:发表于2022-02-17 20:50 被阅读0次

    day8:540. 有序数组中的单一元素(中等)
    思想:

    • 使用栈:由于数组中的元素都是成对出现的,因此使用栈对数组内容进行操作,到最后剩的一个就是需要返回的元素
    • 使用二分法:还是由于数组中的元素都是成对出现的,因此,去数组长度的中间值,如果mid为偶数说明目标元素在[mid,arr.length]这个区间里面;[参考]
      如果Mid为奇数,说明目标元素在[0,mid]这个区间
      方法一:
    var singleNonDuplicate = function (nums) {
      let arr = [];
      for (let i = 0, len = nums.length; i < len; i++) {
        if (!arr.includes(nums[i])) {
          arr.push(nums[i]);
        } else {
          arr.pop();
        }
      }
      return arr.length > 0 ? arr[0] : null;
    }
    

    方法二:

    var singleNonDuplicate = function (nums) {
      let left=0,right=nums.length-1;
      while(left < right){
        let mid = (left + right) >>> 1;
        //偶数值
        if(mid % 2 === 0){
          //相等则说明在左边,左边向前移动,取值空间重置为[left,mid]
          if(nums[mid] === nums[mid+1]){
              left = left +1;
          }else{
              right = mid; 
          }
        }else{
          //奇数值;当基数和前面的一位相等,说明目标在其右侧,左值向前移动,取值空间重置为[mid,right]
          if(nums[mid] === nums[mid-1]){
            left = left +1
          }else{
            right = mid
          }
        }
      }
    return nums[right]
    }
    

    相关文章

      网友评论

        本文标题:56.有序数组中的单一元素

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