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

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

作者: 一直流浪 | 来源:发表于2022-10-24 07:48 被阅读0次

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

    题目链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/

    难度:中等

    题目描述:

    给定一个按照升序排列的整数数组 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]
    

    解题思路:

    这道题非常简单,看见算法时间复杂度必须是 O(log n) 级别,那一定是想到二分查找法。

    我们先利用二分查找,先找到等于目标值target的下标,再向左右挨个遍历,找到第一个和最后一个等于目标值的下标。

    这道题过于简单,就不做过多的描述了。

    代码:

    class Solution {
        public int[] searchRange(int[] nums, int target) {
            int l = 0;
            int r = nums.length-1;
            int mid = 0;
            while(l<=r) {
                mid = (l+r)/2;
                if(nums[mid] == target) {
                    l = mid;
                    r = mid;
                    while(l-1>=0 && nums[l-1] == target) {
                        l = l - 1;
                    }
                    while(r+1<nums.length && nums[r+1] == target) {
                        r = r + 1;
                    }
                    break;
                } else if(nums[mid] > target) {
                    r = mid - 1;
                    
                } else {
                    l = mid + 1;
                }
            }
            if(l>r) {
                l = -1;
                r = -1;
            }
            int[] result = {l,r};
            return result;
        }
    }
    

    相关文章

      网友评论

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

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