Skip to content

Commit 6b5db5f

Browse files
committed
add code
1 parent bf8c2e1 commit 6b5db5f

14 files changed

+739
-0
lines changed

.idea/uiDesigner.xml

+124
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package BinarySearch.Q153;
2+
3+
public class FindMinInRotatedSortedArray {
4+
public int findMin(int[] nums) {
5+
int left = 0;
6+
int right = nums.length - 1;
7+
8+
while (left < right) {
9+
int mid = left + (right - left) / 2;
10+
if (nums[mid] > nums[right]) {
11+
left = mid + 1;
12+
} else {
13+
right = mid;
14+
}
15+
}
16+
return nums[left];
17+
}
18+
19+
public static void main(String[] args) {
20+
FindMinInRotatedSortedArray solution = new FindMinInRotatedSortedArray();
21+
int[] nums = {4, 5, 6, 7, 0, 1, 2};
22+
System.out.println("×îÐ¡ÔªËØÊÇ: " + solution.findMin(nums));
23+
}
24+
}

BinarySearch/Q154/Solution.java

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package BinarySearch.Q154;
2+
3+
class Solution {
4+
public int findMin(int[] nums) {
5+
int i = 0, j = nums.length - 1;
6+
while (i < j) {
7+
int m = (i + j) / 2;
8+
if (nums[m] > nums[j]) i = m + 1;
9+
else if (nums[m] < nums[j]) j = m;
10+
else j--;
11+
}
12+
return nums[i];
13+
}
14+
}
15+
+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package BinarySearch.Q33;
2+
3+
public class RotatedArraySearch {
4+
public static int search(int[] nums, int target) {
5+
int left = 0;
6+
int right = nums.length - 1;
7+
8+
while (left <= right) {
9+
int mid = left + (right - left) / 2;
10+
11+
if (nums[mid] == target) {
12+
return mid;
13+
}
14+
15+
// ĹĐśĎ×ó°ë˛żˇÖĘǡńÓĐĐň
16+
if (nums[left] <= nums[mid]) {
17+
if (target >= nums[left] && target < nums[mid]) {
18+
right = mid - 1;
19+
} else {
20+
left = mid + 1;
21+
}
22+
} else {
23+
if (target > nums[mid] && target <= nums[right]) {
24+
left = mid + 1;
25+
} else {
26+
right = mid - 1;
27+
}
28+
}
29+
}
30+
return -1;
31+
}
32+
33+
public static void main(String[] args) {
34+
int[] nums = {4, 5, 6, 7, 0, 1, 2};
35+
int target = 0;
36+
System.out.println(search(nums, target));
37+
}
38+
}

BinarySearch/Q33/Solution.java

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package BinarySearch.Q33;
2+
3+
class Solution {
4+
public int search(int[] nums, int target) {
5+
int lo = 0, hi = nums.length - 1;
6+
while (lo <= hi) {
7+
int mid = lo + (hi - lo) / 2;
8+
if (nums[mid] == target) {
9+
return mid;
10+
}
11+
12+
// 先根据 nums[0] 与 target 的关系判断目标值是在左半段还是右半段
13+
if (target >= nums[0]) {
14+
// 目标值在左半段时,若 mid 在右半段,则将 mid 索引的值改成 inf
15+
if (nums[mid] < nums[0]) {
16+
nums[mid] = Integer.MAX_VALUE;
17+
}
18+
} else {
19+
// 目标值在右半段时,若 mid 在左半段,则将 mid 索引的值改成 -inf
20+
if (nums[mid] >= nums[0]) {
21+
nums[mid] = Integer.MIN_VALUE;
22+
}
23+
}
24+
25+
if (nums[mid] < target) {
26+
lo = mid + 1;
27+
} else {
28+
hi = mid - 1;
29+
}
30+
}
31+
return -1;
32+
}
33+
}
34+

BinarySearch/Q34/FindTargetRange.java

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package BinarySearch.Q34;
2+
3+
public class FindTargetRange {
4+
public static int[] searchRange(int[] nums, int target) {
5+
int[] result = {-1, -1};
6+
if (nums == null || nums.length == 0) {
7+
return result;
8+
}
9+
10+
// ²éÕÒÆðʼλÖÃ
11+
int left = 0;
12+
int right = nums.length - 1;
13+
while (left < right) {
14+
int mid = left + (right - left) / 2;
15+
if (nums[mid] < target) {
16+
left = mid + 1;
17+
} else {
18+
right = mid;
19+
}
20+
}
21+
if (nums[left] != target) {
22+
return result;
23+
}
24+
result[0] = left;
25+
26+
// ²éÕÒ½áÊøÎ»ÖÃ
27+
right = nums.length - 1;
28+
while (left < right) {
29+
int mid = left + (right - left + 1) / 2;
30+
if (nums[mid] > target) {
31+
right = mid - 1;
32+
} else {
33+
left = mid;
34+
}
35+
}
36+
result[1] = right;
37+
38+
return result;
39+
}
40+
41+
public static void main(String[] args) {
42+
int[] nums = {5, 7, 7, 8, 8, 10};
43+
int target = 8;
44+
int[] range = searchRange(nums, target);
45+
System.out.println("[" + range[0] + ", " + range[1] + "]");
46+
}
47+
}

BinarySearch/Q34/Solution.java

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package BinarySearch.Q34;
2+
3+
class Solution {
4+
public int[] searchRange (int[] nums, int target) {
5+
int upper = upperBound(nums,target);
6+
int low = lowerBound(nums,target);
7+
//不存在情况
8+
if (upper < low) {
9+
return new int[]{-1,-1};
10+
}
11+
return new int[]{low,upper};
12+
}
13+
//计算下边界
14+
int lowerBound(int[] nums, int target) {
15+
int left = 0, right = nums.length - 1;
16+
while (left <= right) {
17+
//这里需要注意,计算mid
18+
int mid = left + ((right - left) >> 1);
19+
if (target <= nums[mid]) {
20+
//当目标值小于等于nums[mid]时,继续在左区间检索,找到第一个数
21+
right = mid - 1;
22+
23+
}else if (target > nums[mid]) {
24+
//目标值大于nums[mid]时,则在右区间继续检索,找到第一个等于目标值的数
25+
left = mid + 1;
26+
27+
}
28+
}
29+
return left;
30+
}
31+
//计算上边界
32+
int upperBound(int[] nums, int target) {
33+
int left = 0, right = nums.length - 1;
34+
while (left <= right) {
35+
int mid = left + ((right - left) >> 1);
36+
if (target >= nums[mid]) {
37+
left = mid + 1;
38+
}else if (target < nums[mid]) {
39+
right = mid - 1;
40+
}
41+
}
42+
return right;
43+
}
44+
}
45+

0 commit comments

Comments
 (0)