写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数。
这个矩阵具有以下特性:
- 每行中的整数从左到右是排序的。
- 每一列的整数从上到下是排序的。
- 在每一行或每一列中没有重复的整数。
样例
例1:
输入:
[[3,4]]
target=3
输出:1
例2:
输入:
[
[1, 3, 5, 7],
[2, 4, 7, 8],
[3, 5, 9, 10]
]
target = 3
输出:2
挑战
要求O(m+n) 时间复杂度和O(1) 额外空间
思路是二分查找每一行
class Solution {
public:
/**
* @param matrix: A list of lists of integers
* @param target: An integer you want to search in matrix
* @return: An integer indicate the total occurrence of target in the given matrix
*/
int searchMatrix(vector<vector<int>> &matrix, int target)
{
// write your code here
int size = matrix.size();
int count = 0;
for(int i = 0; i < size; i++)
{
bool ret = search(matrix[i], target);
if(ret)
{
count++;
}
//cout<<count<<endl;
//return count;
}
return count;
}
bool search(vector<int> nums, int target)
{
int left = 0;
int right = nums.size() - 1;
while(left <= right)
{
int mid = (left + right) / 2 ;
if(nums[mid] == target)
return true;
else if(nums[mid] > target)
right = mid - 1;
else if(nums[mid] < target)
left = mid + 1 ;
}
return false;
}
};