@@ -216,39 +216,21 @@ var search = function (nums, target) {
216
216
``` rust
217
217
impl Solution {
218
218
pub fn search (nums : Vec <i32 >, target : i32 ) -> i32 {
219
- fn my_search (nums : & Vec <i32 >, target : i32 , left : i32 , right : i32 ) -> i32 {
220
- if left > right {
221
- return 0 ;
222
- }
223
-
224
- let index = (right - left ) / 2 + left ;
225
- let num = nums [index as usize ];
226
- if num > target {
227
- my_search (nums , target , left , index - 1 )
228
- } else if num < target {
229
- my_search (nums , target , index + 1 , right )
230
- } else {
231
- // 搜索边界
232
- let mut count = 1 ;
233
- for i in (0 .. index ). rev () {
234
- if nums [i as usize ] == target {
235
- count += 1 ;
236
- } else {
237
- break ;
238
- }
219
+ let help = | target | {
220
+ let mut left = 0 ;
221
+ let mut right = nums . len ();
222
+ while left < right {
223
+ let mid = left + (right - left ) / 2 ;
224
+ if nums [mid ] <= target {
225
+ left = mid + 1 ;
226
+ } else {
227
+ right = mid ;
239
228
}
240
- for i in (index + 1 ).. nums . len () as i32 {
241
- if nums [i as usize ] == target {
242
- count += 1 ;
243
- } else {
244
- break ;
245
- }
246
- }
247
- count
248
229
}
249
- }
230
+ left as i32
231
+ };
250
232
251
- my_search ( & nums , target , 0 , nums . len () as i32 - 1 )
233
+ help ( target ) - help ( target - 1 )
252
234
}
253
235
}
254
236
```
0 commit comments