@@ -214,49 +214,28 @@ func searchRange(nums []int, target int) []int {
214
214
### ** Rust**
215
215
216
216
``` rust
217
- use std :: cmp :: Ordering ;
218
-
219
217
impl Solution {
220
218
pub fn search_range (nums : Vec <i32 >, target : i32 ) -> Vec <i32 > {
221
219
let n = nums . len ();
222
- let mut l = 0 ;
223
- let mut r = n ;
224
- while l < r {
225
- let mid = l + (r - l ) / 2 ;
226
- match nums [mid ]. cmp (& target ) {
227
- Ordering :: Less => l = mid + 1 ,
228
- Ordering :: Greater => r = mid ,
229
- Ordering :: Equal => {
230
- let mut res = vec! [mid as i32 , mid as i32 ];
231
- let mut t = mid ;
232
- while l < t {
233
- let mid = l + (t - l ) / 2 ;
234
- match nums [mid ]. cmp (& target ) {
235
- Ordering :: Less => l = mid + 1 ,
236
- Ordering :: Greater => t = mid ,
237
- Ordering :: Equal => {
238
- res [0 ] = mid as i32 ;
239
- t = mid ;
240
- }
241
- }
242
- }
243
- t = mid + 1 ;
244
- while t < r {
245
- let mid = t + (r - t ) / 2 ;
246
- match nums [mid ]. cmp (& target ) {
247
- Ordering :: Less => t = mid + 1 ,
248
- Ordering :: Greater => r = mid ,
249
- Ordering :: Equal => {
250
- res [1 ] = mid as i32 ;
251
- t = mid + 1 ;
252
- }
253
- }
254
- }
255
- return res ;
220
+ let search = | target | {
221
+ let mut left = 0 ;
222
+ let mut right = n ;
223
+ while left < right {
224
+ let mid = left + (right - left ) / 2 ;
225
+ if nums [mid ] < target {
226
+ left = mid + 1 ;
227
+ } else {
228
+ right = mid ;
256
229
}
257
230
}
231
+ left
232
+ };
233
+ let start = search (target );
234
+ let end = search (target + 1 ) - 1 ;
235
+ if start >= n || nums [start ] != target {
236
+ return vec! [- 1 , - 1 ];
258
237
}
259
- vec! [- 1 , - 1 ]
238
+ vec! [start as i32 , end as i32 ]
260
239
}
261
240
}
262
241
```
@@ -284,6 +263,31 @@ function searchRange(nums: number[], target: number): number[] {
284
263
}
285
264
```
286
265
266
+ ``` ts
267
+ function searchRange(nums : number [], target : number ): number [] {
268
+ const n = nums .length ;
269
+ const search = (target : number ) => {
270
+ let left = 0 ;
271
+ let right = n ;
272
+ while (left < right ) {
273
+ const mid = (left + right ) >>> 1 ;
274
+ if (nums [mid ] < target ) {
275
+ left = mid + 1 ;
276
+ } else {
277
+ right = mid ;
278
+ }
279
+ }
280
+ return left ;
281
+ };
282
+ const start = search (target );
283
+ const end = search (target + 1 ) - 1 ;
284
+ if (nums [start ] !== target ) {
285
+ return [- 1 , - 1 ];
286
+ }
287
+ return [start , end ];
288
+ }
289
+ ```
290
+
287
291
### ** ...**
288
292
289
293
```
0 commit comments