//给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 // // 如果数组中不存在目标值 target,返回 [-1, -1]。 // // 进阶: // // // 你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗? // // // // // 示例 1: // // //输入:nums = [5,7,7,8,8,10], target = 8 //输出:[3,4] // // 示例 2: // // //输入:nums = [5,7,7,8,8,10], target = 6 //输出:[-1,-1] // // 示例 3: // // //输入:nums = [], target = 0 //输出:[-1,-1] // // // // 提示: // // // 0 <= nums.length <= 105 // -109 <= nums[i] <= 109 // nums 是一个非递减数组 // -109 <= target <= 109 // // Related Topics 数组 二分查找 // 👍 784 👎 0 //leetcode submit region begin(Prohibit modification and deletion) class Solution { public int[] searchRange(int[] nums, int target) { int left = 0; int right = nums.length - 1; int l = -2; int r = 0; // right >= left while (right >= left) { int mid = (left + right) / 2; if (nums[mid] > target) { right = mid - 1; } else if (nums[mid] < target) { left = mid + 1; } else { l = mid; r = mid; break; } } if (l != -2) { while (left <= l) { int mid = (left + l) / 2; if (nums[mid] == target) { l = mid - 1; } else { left = mid + 1; } } while (right >= r) { int mid = (r + right) / 2; if (nums[mid] == target) { r = mid + 1; } else { right = mid - 1; } } } return new int[]{l + 1, r - 1}; } } //leetcode submit region end(Prohibit modification and deletion)
2020-12-28 在排序数组中查询第一个和最后一个相同的数字
最新推荐文章于 2023-03-13 18:10:36 发布