数据解构和算法

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

2022-02-17  本文已影响0人  wo不是黄蓉

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

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]
}
上一篇下一篇

猜你喜欢

热点阅读