65、二分-在排序数组中查找元素的第一个和最后一个位置

思路: 

寻找数组中的目标值第一个和最后一个,如果不存在哪儿就是返回-1。

第一种方式直接线性遍历,找到目标值记录当前下标。继续寻找下一个不等于目标值,说明下一个目标值的下标就是结尾。直接返回。

第二种方式通过使用二分法寻找,先二分寻找寻找第一个目标值,如果存在再继续寻找最后一个目标值。代码如下:

class Solution {
     public static int[] searchRange(int[] nums, int target) {
        int[] ans = {-1, -1};
        if (nums==null||nums.length==0){
            return ans;
        }
        ans[0]=findFirst(nums,0,nums.length-1,target);
        if (ans[0]!=-1){
            ans[1]=findLast(nums,ans[0],nums.length-1,target);
        }
        return ans;
    }

    private static int findLast(int[] nums, int L, int R, int target) {
        if (nums[L]>target||nums[R]<target){
            return -1;
        }
        if (L==R){
            return target==nums[L]?L:-1;
        }
        int mid=R-(R-L)/2;
        if (nums[mid]<=target&&nums[R]>=target){
            return findLast(nums,mid,R,target);
        }else {
            return findLast(nums,L,mid-1,target);
        }
    }

    private static int findFirst(int[] nums, int L, int R, int target) {
        if (nums[L]>target||nums[R]<target){
            return -1;
        }
        if (L==R){
            return target==nums[L]?L:-1;
        }
        int mid=L+(R-L)/2;
        if (nums[L]<=target&&nums[mid]>=target){
            return findFirst(nums,L,mid,target);
        }else {
            return findFirst(nums,mid+1,R,target);
        }
    }
}

最近更新

  1. TCP协议是安全的吗?

    2024-04-27 23:30:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-27 23:30:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-27 23:30:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-27 23:30:02       20 阅读

热门阅读

  1. LeetCode 1146. 快照数组【哈希表+二分查找】中等

    2024-04-27 23:30:02       11 阅读
  2. 大文件分片上传前端手写

    2024-04-27 23:30:02       10 阅读
  3. 机器视觉检测技术是什么?突出的亮点有哪些?

    2024-04-27 23:30:02       11 阅读
  4. web页面点击右键显示按钮

    2024-04-27 23:30:02       10 阅读
  5. 目前还能使用的免费证书

    2024-04-27 23:30:02       10 阅读
  6. SIC知识(8)--碳化硅的制备难点

    2024-04-27 23:30:02       9 阅读
  7. 诡异的linux系统负载问题

    2024-04-27 23:30:02       9 阅读
  8. Swift手撸轮播效果

    2024-04-27 23:30:02       10 阅读
  9. 001 rabbitmq减库存demo direct

    2024-04-27 23:30:02       11 阅读
  10. 【C++】使用 std::shared_ptr 导致的循环引用问题

    2024-04-27 23:30:02       11 阅读
  11. mysql 连接数配置,解决Too many connections错误

    2024-04-27 23:30:02       12 阅读