欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > java刷题[力扣34.在排序数组中查找元素的第一个和最后一个位置]

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

2025/2/24 0:38:10 来源:https://blog.csdn.net/2302_81153999/article/details/144258435  浏览:    关键词:java刷题[力扣34.在排序数组中查找元素的第一个和最后一个位置]

题目链接-->34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)

题目描述:

 题目思路

1.。非递减顺序排列的整数数组(即 递增顺序但可能会有重复元素)

=》  思考用二分查找 来解决

2.。分别实现Leftmost 和Rightmost 两个方法

Leftmost(返回与目标相同的 重复元素里 最靠左边的,未找到 则返回-1)

Leftmost方法 代码实现:

  public int Leftmost(int[] a, int target) {int i = 0;int j = a.length - 1;int candidate = -1;//将候选值 初始化为-1while (i <= j) {int mid = (i + j) >>> 1;if (target < a[mid]) {j = mid - 1;} else if (target > a[mid]) {i = mid + 1;} else {
//当找到目标值时,更新候选值,继续向左边找candidate = mid;j = mid - 1;}}return candidate;
//找到,则返回相同元素中最靠左的
//未找到,则返回 -1}

Rightmost同理;


题目完整代码实现

class Solution {public int[] searchRange(int[] nums, int target) {int x = Leftmost(nums, target);if (x == -1) { //未找到,直接返回[-1,-1]return new int[] { -1, -1 };} else {return new int[] { x, Rightmost(nums, target) };}}public int Leftmost(int[] a, int target) {int i = 0;int j = a.length - 1;int candidate = -1;while (i <= j) {int mid = (i + j) >>> 1;if (target < a[mid]) {j = mid - 1;} else if (target > a[mid]) {i = mid + 1;} else {candidate = mid;j = mid - 1;}}return candidate;}public int Rightmost(int[] a, int target) {int i = 0;int j = a.length - 1;int candidate = -1;while (i <= j) {int mid = (i + j) >>> 1;if (target > a[mid]) {i = mid + 1;} else if (target < a[mid]) {j = mid - 1;} else {candidate = mid;i = mid + 1;}}return candidate;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词