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

    科技2024-11-23  21

    见到有序,首先想到二分法,这道题和博主上一篇算法都是二分法,大家可以一起看

    Leetcode-33. 搜索旋转排序数组


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


    class Solution { public int[] searchRange(int[] nums, int target) { int []result = new int[]{-1,-1}; if(nums == null || nums.length <= 0){ return result; } int len = nums.length; int l = 0; int r = len - 1; int t = -1; while(l <= r){ int mid = (l + r) / 2; if(nums[mid] == target){ t = mid; break; } if(nums[mid] < target){ l = mid + 1; } if(nums[mid] > target){ r = mid - 1; } } if(t == -1){ return result; } int lt = t; int rt = t; while(nums[lt] == target ){ lt --; if(lt < 0){ break; } } while(nums[rt] == target ){ rt ++; if(rt > len -1){ break; } } result[0] = lt + 1; result[1] = rt - 1; return result; } }
    Processed: 0.010, SQL: 8