38
38
39
39
OK!我们到这一步就能把这个变种给整的明明白白的了,下面我们看一哈程序代码吧,也是非常简单的。
40
40
41
-
41
+ Java Code:
42
42
43
43
``` java
44
44
public static int lowBoundnum(int [] nums,int target,int left, int right) {
45
45
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;
61
54
}
55
+ else {
56
+ right = mid - 1 ;
57
+ }
58
+
59
+ } else if (nums[mid] <= target){
60
+ left = mid + 1 ;
62
61
}
63
- // 所有元素都小于目标元素
64
- return - 1 ;
65
62
}
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
+ }
66
91
```
67
92
68
93
## ** 找出最后一个小于目标元素的索引**
@@ -73,6 +98,8 @@ public static int lowBoundnum(int[] nums,int target,int left, int right) {
73
98
74
99
查找最后一个小于目标数的元素,比如我们的目标数为 7 ,此时他前面的数为 6,最后一个 6 的索引为 5,此时我们返回 5 即可,如果目标数元素为 12,那么我们最后一个元素为 11,仍小于目标数,那么我们此时返回 8,即可。这个变种其实算是上面变种的相反情况,上面的会了,这个也完全可以搞定了,下面我们看一下代码吧。
75
100
101
+ Java Code:
102
+
76
103
``` java
77
104
public static int upperBoundnum(int [] nums,int target,int left, int right) {
78
105
@@ -99,6 +126,7 @@ public static int upperBoundnum(int[] nums,int target,int left, int right) {
99
126
```
100
127
101
128
Go Code:
129
+
102
130
``` go
103
131
func upperBoundnum (nums []int , target , left , right int ) int {
104
132
0 commit comments