Skip to content

Commit e63c35b

Browse files
author
lincongcong
committed
add a code in go
1 parent 02aaf28 commit e63c35b

File tree

1 file changed

+46
-18
lines changed

1 file changed

+46
-18
lines changed

animation-simulation/二分查找及其变种/找出第一个大于或小于目标的索引.md

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -38,31 +38,56 @@
3838

3939
OK!我们到这一步就能把这个变种给整的明明白白的了,下面我们看一哈程序代码吧,也是非常简单的。
4040

41-
41+
Java Code:
4242

4343
```java
4444
public static int lowBoundnum(int[] nums,int target,int left, int right) {
4545

46-
while (left <= right) {
47-
//求中间值
48-
int mid = left + ((right - left) >> 1);
49-
//大于目标值的情况
50-
if (nums[mid] > target) {
51-
//返回 mid
52-
if (mid == 0 || nums[mid-1] <= target) {
53-
return mid;
54-
}
55-
else{
56-
right = mid -1;
57-
}
58-
59-
} else if (nums[mid] <= target){
60-
left = mid + 1;
46+
while (left <= right) {
47+
//求中间值
48+
int mid = left + ((right - left) >> 1);
49+
//大于目标值的情况
50+
if (nums[mid] > target) {
51+
//返回 mid
52+
if (mid == 0 || nums[mid-1] <= target) {
53+
return mid;
6154
}
55+
else{
56+
right = mid -1;
57+
}
58+
59+
} else if (nums[mid] <= target){
60+
left = mid + 1;
6261
}
63-
//所有元素都小于目标元素
64-
return -1;
6562
}
63+
//所有元素都小于目标元素
64+
return -1;
65+
}
66+
```
67+
68+
Go Code:
69+
```go
70+
func lowBoundnum(nums []int, target, left, right int) int {
71+
72+
for (left <= right) {
73+
//求中间值
74+
mid := left + ((right - left) >> 1);
75+
//大于目标值的情况
76+
if (nums[mid] > target) {
77+
//返回 mid
78+
if (mid == 0 || nums[mid-1] <= target) {
79+
return mid
80+
}else{
81+
right = mid -1
82+
}
83+
84+
} else if (nums[mid] <= target){
85+
left = mid + 1
86+
}
87+
}
88+
//所有元素都小于目标元素
89+
return -1
90+
}
6691
```
6792

6893
## **找出最后一个小于目标元素的索引**
@@ -73,6 +98,8 @@ public static int lowBoundnum(int[] nums,int target,int left, int right) {
7398
7499
查找最后一个小于目标数的元素,比如我们的目标数为 7 ,此时他前面的数为 6,最后一个 6 的索引为 5,此时我们返回 5 即可,如果目标数元素为 12,那么我们最后一个元素为 11,仍小于目标数,那么我们此时返回 8,即可。这个变种其实算是上面变种的相反情况,上面的会了,这个也完全可以搞定了,下面我们看一下代码吧。
75100

101+
Java Code:
102+
76103
```java
77104
public static int upperBoundnum(int[] nums,int target,int left, int right) {
78105

@@ -99,6 +126,7 @@ public static int upperBoundnum(int[] nums,int target,int left, int right) {
99126
```
100127

101128
Go Code:
129+
102130
```go
103131
func upperBoundnum(nums []int, target, left, right int) int {
104132

0 commit comments

Comments
 (0)