其他分享
首页 > 其他分享> > 240. 搜索二维矩阵 II(二分查找)

240. 搜索二维矩阵 II(二分查找)

作者:互联网

240. 搜索二维矩阵 II

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

 

示例 1:

输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true

示例 2:

输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出:false

 

提示:

 1 class Solution {
 2 public:
 3     bool binarySearch(const vector<int> &vec, int target) {
 4         int left = 0;
 5         int right = vec.size() - 1;
 6         while (left <= right) {
 7             int mid = left + (right - left) / 2;
 8             if (vec[mid] == target) {
 9                 return true;
10             }
11             if (vec[mid] < target) { // 目标值在区间[mid + 1, right]
12                 left = mid + 1;
13             } else { // 目标值在区间[left, mid - 1]
14                 right = mid - 1;
15             }
16         }
17         return false;
18     }
19     bool searchMatrix(vector<vector<int>>& matrix, int target) {
20         if (matrix.size() == 0 || matrix[0].size() == 0) {
21             return false;
22         }
23         int n = matrix.size();
24         int m = matrix[0].size();
25         // 遍历每一行查找目标值是否存在
26         for (int i = 0; i < n; i++) {
27             // 如果只存在一列,查找每一行元素是否目标值一样
28             if (m == 1) {
29                 if (matrix[i][0] == target) {
30                     return true;
31                 }
32             } else { // 二维数组多于1列,查找每一行是否存在目标值
33                 if (binarySearch(matrix[i], target)) {
34                     return true;
35                 }
36             }
37         }
38         return false;
39     }
40 };

标签:二分,return,target,int,II,240,升序,size,matrix
来源: https://www.cnblogs.com/MGFangel/p/16318720.html