0
点赞
收藏
分享

微信扫一扫

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

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

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

示例1:

示例2:

示例3:

提示:

Java解法

package sj.shimmer.algorithm.ten_3;

/**
* Created by SJ on 2021/2/15.
*/


class D22 {
public static void main(String[] args) {
int[] result1 = searchRange(new int[]{5, 7, 7, 8, 8, 10}, 8);
int[] result2 = searchRange(new int[]{5,7,7,8,8,10},6);
int[] result3 = searchRange(new int[]{},0);
int[] result4 = searchRange(new int[]{2,2},2);
System.out.println(result1[0]+","+result1[1]);
System.out.println(result2[0]+","+result2[1]);
System.out.println(result3[0]+","+result3[1]);
System.out.println(result4[0]+","+result4[1]);
}

public static int[] searchRange(int[] nums, int target) {
int[] result = new int[]{-1,-1};
if (nums != null&&nums.length!=0) {
int length = nums.length;
int start = 0;
int end = length-1;
while (start<=end) {
int mid = (start+end)/2;
if (nums[mid]==target) {
//求左边界
result[0] = mid;
result[1] = mid;
for (int i = mid-1; i >= 0; i--) {
if (nums[i] ==target) {
result[0] = i;
}else {
break;
}
}
//求右边界
for (int i = mid+1; i < length; i++) {
if (nums[i] ==target) {
result[1] = i;
}else {
break;
}
}
return result;
} else if (nums[mid] < target) {
start = mid+1;
}else {
end = mid-1;
}
}

}
return result;
}
}

官方解

https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/solution/zai-pai-xu-shu-zu-zhong-cha-zhao-yuan-su-de-di-3-4/

  1. 二分查找

    • 时间复杂度: O(log n)

    • 空间复杂度:O(1)

举报

相关推荐

0 条评论