34. Find First and Last Position of Element in Sorted Array
Description
描述:https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/description/ 题意:在有序数组中,查找目标数的第一次和最后一次出现的下标,没有则返回-1。
Solution: (Java)
class Solution {
public int[] searchRange(int[] nums
, int target
) {
int[] indexs
= new int[2];
int left
= 0, right
= nums
.length
-1, mid
, first
= -1, last
= -1;
indexs
[0] = -1;
indexs
[1] = -1;
while (left
<= right
) {
mid
= (left
+ right
) / 2;
if (nums
[mid
] == target
) {
first
= mid
;
last
= mid
;
while (first
>= 0) {
if (nums
[first
] == target
) {
indexs
[0] = first
;
first
--;
} else
break;
}
while (last
<= nums
.length
-1) {
if (nums
[last
] == target
) {
indexs
[1] = last
;
last
++;
} else
break;
}
break;
} else if (nums
[mid
] > target
) {
right
= mid
- 1;
} else {
left
= mid
+ 1;
}
}
return indexs
;
}
}
思路
二分法查找,复杂度要求O(log n);稍微变动二分查找即可,在找到目标之后,往目标的左右两边扩展查找即可;改进:在找到目标后往两边扩展时,还可以继续用二分法。