48
48
49
49
将二维矩阵逻辑展开,然后二分查找即可。
50
50
51
- 时间复杂度O(logmn)。
51
+ 时间复杂度:$ O(logmn)$ 。
52
52
53
53
** 方法二:从左下角或右上角搜索**
54
54
55
- 这里我们以左下角作为起始搜索点,往右上方向开始搜索,比较当前元素 ` matrix[i][j] ` 与 target 的大小关系:
55
+ 这里我们以左下角作为起始搜索点,往右上方向开始搜索,比较当前元素 ` matrix[i][j] ` 与 ` target ` 的大小关系:
56
56
57
57
- 若 ` matrix[i][j] == target ` ,说明找到了目标值,直接返回 true。
58
58
- 若 ` matrix[i][j] > target ` ,说明这一行从当前位置开始往右的所有元素均大于 target,应该让 i 指针往上移动,即 ` i-- ` 。
59
59
- 若 ` matrix[i][j] < target ` ,说明这一列从当前位置开始往上的所有元素均小于 target,应该让 j 指针往右移动,即 ` j++ ` 。
60
60
61
61
若搜索结束依然找不到 target,返回 false。
62
62
63
- 时间复杂度O(m + n)。
63
+ 时间复杂度:$ O(m + n)$ 。
64
64
65
65
<!-- tabs:start -->
66
66
@@ -284,6 +284,32 @@ func searchMatrix(matrix [][]int, target int) bool {
284
284
}
285
285
```
286
286
287
+ ### ** TypeScript**
288
+
289
+ ``` ts
290
+ function searchMatrix(matrix : number [][], target : number ): boolean {
291
+ const m = matrix .length ;
292
+ const n = matrix [0 ].length ;
293
+ let left = 0 ;
294
+ let right = m * n ;
295
+ while (left < right ) {
296
+ const mid = (left + right ) >>> 1 ;
297
+ const i = Math .floor (mid / n );
298
+ const j = mid % n ;
299
+ if (matrix [i ][j ] === target ) {
300
+ return true ;
301
+ }
302
+
303
+ if (matrix [i ][j ] < target ) {
304
+ left = mid + 1 ;
305
+ } else {
306
+ right = mid ;
307
+ }
308
+ }
309
+ return false ;
310
+ }
311
+ ```
312
+
287
313
### ** Rust**
288
314
289
315
``` rust
@@ -306,6 +332,29 @@ impl Solution {
306
332
}
307
333
```
308
334
335
+ ``` rust
336
+ use std :: cmp :: Ordering ;
337
+ impl Solution {
338
+ pub fn search_matrix (matrix : Vec <Vec <i32 >>, target : i32 ) -> bool {
339
+ let m = matrix . len ();
340
+ let n = matrix [0 ]. len ();
341
+ let mut left = 0 ;
342
+ let mut right = m * n ;
343
+ while left < right {
344
+ let mid = left + (right - left ) / 2 ;
345
+ let i = mid / n ;
346
+ let j = mid % n ;
347
+ match matrix [i ][j ]. cmp (& target ) {
348
+ Ordering :: Equal => return true ,
349
+ Ordering :: Less => left = mid + 1 ,
350
+ Ordering :: Greater => right = mid ,
351
+ }
352
+ }
353
+ false
354
+ }
355
+ }
356
+ ```
357
+
309
358
### ** ...**
310
359
311
360
```
0 commit comments