写出一个高效的算法来搜索 m × n矩阵中的值。
这个矩阵具有以下特性:
- 每行中的整数从左到右是排序的。
- 每行的第一个数大于上一行的最后一个整数。
样例
考虑下列矩阵:
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
给出 target = 3
,返回 true
挑战
O(log(n) + log(m)) 时间复杂度
思路
目标是由多个vector向量组成的二维数组,并且充分利用给出矩阵的特点,
- 每行中的整数从左到右是排序的。
- 每行的第一个数大于上一行的最后一个整数。
即可以先判断要查的数是否比某个向量的最后一个要大。如果大于,就说明不在这个向量内,可以继续判断后面的,如果小于,说明要找的数在这个向量中,然后就可以逐个查找。
同时符合提高中的
O(log(n) + log(m)) 时间复杂度
bool searchMatrix(vector<vector<int>> &s, int target) {
int i;
for(i=0;i<s.size();i++){
if(target>s[i][s[i].size()-1]){
continue;
}else{
break;
}
}
if(s.size()==0){return false;}
for(int j=0;j<s[i].size();j++){
if(target==s[i][j]){
return true;
}
}
return false;
}