Skip to content

Commit 84bbb06

Browse files
committed
34.在排序数组中查找元素的第一个和最后一个位置,二分查找
1 parent 7ec8301 commit 84bbb06

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

leetcode_Java/DoneTitle.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
25. K 个一组翻转链表
1616
31. 下一个排列
1717
33. 搜索旋转排序数组
18+
34. 在排序数组中查找元素的第一个和最后一个位置
1819
37. 解数独
1920
39. 组合总和
2021
40. 组合总和 II

leetcode_Java/DoneType.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@
141141
15. 三数之和
142142
31. 下一个排列
143143
33. 搜索旋转排序数组
144+
34. 在排序数组中查找元素的第一个和最后一个位置
144145
41. 缺失的第一个正数
145146
54. 螺旋矩阵
146147
56. 合并区间

leetcode_Java/Solution0034.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// 34. 在排序数组中查找元素的第一个和最后一个位置
2+
3+
4+
/*
5+
二分查找:
6+
1、二分查找,找到中点位置的值,比较判断是否为目标值
7+
2、若不是目标值,则缩小一半的查找区间
8+
3、若是目标值,则向两边扩散查找左右边界
9+
*/
10+
class Solution {
11+
public int[] searchRange(int[] nums, int target) {
12+
int n = nums.length;
13+
int left = 0, right = n - 1;
14+
int[] res = new int[2];
15+
while (left <= right) {
16+
int mid = (left + right) / 2;
17+
if (nums[mid] == target) {
18+
for (int i = mid; i >= 0; i--) {
19+
if (nums[i] != target) {
20+
break;
21+
}
22+
res[0] = i;
23+
}
24+
for (int i = mid; i < n; i++) {
25+
if (nums[i] != target) {
26+
break;
27+
}
28+
res[1] = i;
29+
}
30+
return res;
31+
} else if (nums[mid] < target) {
32+
left = mid + 1;
33+
} else {
34+
right = mid - 1;
35+
}
36+
}
37+
Arrays.fill(res, -1);
38+
return res;
39+
}
40+
}

0 commit comments

Comments
 (0)