Skip to content

Commit 8af9e25

Browse files
committed
34修改
1 parent 57deed4 commit 8af9e25

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

leetCode-34-Find-First-and-Last-Position-of-Element-in-Sorted-Array.md

+55
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,61 @@ public int[] searchRange(int[] nums, int target) {
220220

221221
空间复杂度:O(1)。
222222

223+
@JZW 的提醒下,上边的虽然能 AC,但是如果要找的数字刚好就是 Integer.MIN_VALUE 的话,就会出现错误。可以修改一下。
224+
225+
主要是这两句,除了小于 n,还判断了当前是不是在两端。
226+
227+
```java
228+
if (target > n || mid == 0) {
229+
if (target < n || mid == nums.length - 1) {
230+
```
231+
232+
```java
233+
public int[] searchRange(int[] nums, int target) {
234+
int start = 0;
235+
int end = nums.length - 1;
236+
int[] ans = { -1, -1 };
237+
if (nums.length == 0) {
238+
return ans;
239+
}
240+
while (start <= end) {
241+
int mid = (start + end) / 2;
242+
if (target == nums[mid]) {
243+
int n = mid > 0 ? nums[mid - 1] : Integer.MIN_VALUE;
244+
if (target > n || mid == 0) {
245+
ans[0] = mid;
246+
break;
247+
}
248+
end = mid - 1;
249+
} else if (target < nums[mid]) {
250+
end = mid - 1;
251+
} else {
252+
start = mid + 1;
253+
}
254+
}
255+
start = 0;
256+
end = nums.length - 1;
257+
while (start <= end) {
258+
int mid = (start + end) / 2;
259+
if (target == nums[mid]) {
260+
int n = mid < nums.length - 1 ? nums[mid + 1] : Integer.MAX_VALUE;
261+
if (target < n || mid == nums.length - 1) {
262+
ans[1] = mid;
263+
break;
264+
}
265+
start = mid + 1;
266+
} else if (target < nums[mid]) {
267+
end = mid - 1;
268+
} else {
269+
start = mid + 1;
270+
}
271+
}
272+
return ans;
273+
}
274+
```
275+
276+
277+
223278
# 总
224279

225280
总体来说,这道题并不难,本质就是对二分查找的修改,以便满足我们的需求。

0 commit comments

Comments
 (0)