美文网首页
二分查找(二)——找开始和结束

二分查找(二)——找开始和结束

作者: 旺叔叔 | 来源:发表于2018-10-31 04:47 被阅读0次

LeetCode_34_FindFirstAndLastPositionofElementinSortedArray

题目分析:

注意,这道题其实是结合上一题,让你明白,我们的写法是只能找最左侧值的。      
右侧值可以转换成,大于这个值的最小值,然后下标-1得到。

解法:

public static int[] searchRange(int[] nums, int target) {
    int first = findFirst(nums, 0, nums.length - 1, target);
    if (-1 != first) {
        int last = findLast(nums, 0, nums.length, target);
        return new int[]{first, last};
    }
    return new int[]{-1 ,-1};
}

public static int findFirst(int[] nums, int begin, int end, int target){
    while (begin < end){
        int mid = begin + (end - begin) / 2;
        if(nums[mid] >= target)
            end = mid;
        else
            begin = mid + 1;
    }
    return nums[begin] == target ? begin : -1;
}

public static int findLast(int[] nums, int begin, int end, int target){
    while (begin < end){
        int mid = begin + (end - begin) / 2;
        if(nums[mid] <= target)
            begin = mid + 1;
        else
            end = mid;
    }
    return nums[begin - 1] == target ? begin - 1 : -1;
}

相关文章

  • 二分查找

    二分查找 什么是二分查找 实现原理 什么是二分查找 二分查找是从一个有序数组中找到目标元素(通常是找下标)的过程 ...

  • 二分查找(二)——找开始和结束

    LeetCode_34_FindFirstAndLastPositionofElementinSortedArra...

  • 查找算法

    链式查找 二分查找前提是有序集合,通过比较中间值确定擦找的具体范围 插值查找和二分查找系共同,只是对中间值的一个动...

  • 2021-02-02

    二分查找(折半查找) 二分查找的过程和序列的下标从0开始还是从1开始无关。一般我们从1开始 数据结构重点讲过,这里...

  • 查找

    二分查找 二分搜索,即在有序数组中,查找某一特定元素的搜索。它从中间的元素开始,如果中间的元素是要找的元素,则返回...

  • 109. Convert Sorted List to Bina

    题解一:类似二分查找,借助快慢指针找中点 题解二:

  • 数据结构和算法--二分查找

    二分查找 二分查找的思想 二分查找(Binary Search)算法,也叫折半查找算法。 二分查找针对的是一个有序...

  • python二分查找算法

    文章概述 二分查找法介绍 简单查找与二分查找对比 二分查找  二分查找算法主要思想:在有序列表中查找指定元素,先从...

  • 二分查找

    [TOC] 二分查找的基础模板 二分查找靠左的Index基础模板 二分查找靠右的Index基础模板 二分查找插入t...

  • 算法面试题:看似简单又让人抓狂的二分查找算法

    二分查找法是一种高效的查找算法,它的思想非常好理解,但编写正确的二分查找并不简单。本章从最基础的二分查找实现开始,...

网友评论

      本文标题:二分查找(二)——找开始和结束

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