Leetcode刷题java之34. 在排序数组中查找元素的第一个和最后一个位置

执行结果:

通过

显示详情

执行用时 :0 ms, 在所有 Java 提交中击败了100.00% 的用户

内存消耗 :41.9 MB, 在所有 Java 提交中击败了51.78%的用户

题目:

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

你的算法时间复杂度必须是 O(log n) 级别。

如果数组中不存在目标值,返回 [-1, -1]。

示例 1:

输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]

示例 2:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

采用二分查找法,但是,有重复的数字怎么办呢,那么我们可以制定一个二分查找,仅仅查找左边界,如果没有则返回比他大的数字的开始的索引。

二分查找法虽然思路简单,但是边界细节问题很杂,必须举例才可以解决。

代码;

class Solution {
    public int[] searchRange(int[] nums, int target) {
        int[] result=new int[2];
        //我的二分算法是仅仅找到左边界,如果没有则在下一个位置上
        result[0]=binarySearch(nums,target);
        result[1]=binarySearch(nums,target+1)-1;
        if(result[0]==nums.length||(result[0]=target)
            {
                right=mid;
            }else
            {
                left=mid+1;
            }
        }
        return left;
    }
}

 

你可能感兴趣的:(top100,Leecode,二分查找)