美文网首页
在排序数组中查找元素的第一个和最后一个位置

在排序数组中查找元素的第一个和最后一个位置

作者: 暖男Gatsby | 来源:发表于2020-02-14 17:24 被阅读0次

条件:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。

例如:输入:nums = [5,7,7,8,8,10], target = 8 输出:[3,4] 输入nums = [5,7,7,8,8,10], target = 6,输出[-1,-1],

思路:时间复杂度必须是O(log n) 级别,强烈暗示了“二分法查询”算法,升序更是省下了排序时间

所以第一步,利用升序数组的二分法查询,查出目标值所在区间,如果

1、所选中的中间值大于目标值target,则左边界的元素索引为mid+1,

2、所选中的中间值大于目标值target,则右边界的元素索引为mid-1

3、若与目标值相等,则用while循环分别将指针前移、后移,分别指向第一个和最后一个与目标值相等元素的索引号。

4、若遍历元素无符合条件的元素,则返回[-1,-1]。

var search = function(nums, target) {

  let l = 0;

  let r = nums.length-1;

  var arr = [];  

  while(l<=r){                //最佳搭配

  var mid = (l+r) >>> 1; //最佳获取中间值的方法

  if(nums[mid]<target){

      l=mid+1;

  }else if(nums[mid]>target){

      r=mid-1;

  }

  if(nums[mid]==target){

          var i = mid;

          var j = mid;

      while(nums[j]==target){

          arr[0]=j;

          j--;

      }

      while(nums[i]==target){

          arr[1]=i;

          i++;

      }

      return arr;

      }

  }

  return [-1,-1];

};

相关文章

网友评论

      本文标题:在排序数组中查找元素的第一个和最后一个位置

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