时间限制:1秒 空间限制:32768K 热度指数:1281361
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
例如下面的二维数组就是每行,每列都递增排序,如果在这个数组中查找数字7,则返回true;查找5,返回false.
下面是牛客网《剑指offer》通过所有测试用例:
class Solution {
public:
bool Find(int target, vector<vector<int> > array)
{
int cursize = array.size();//当前数组元素个数
int column = array[0].size();//列数
int row = 0;//目前定位于左上角第一个元素
int col = column - 1;//-1可以想成列下标
bool result = false;
if(cursize < 0 || col < 0)
return false;
while(row < cursize && col >= 0)
{
if(array[row][col] == target)
{
result = true;
break;
}
else if(array[row][col] < target)
{
row++;
}
else
{
col--;
}
}
return result;
}
};
上述代码自己测试的完整版:
class Solution {
public:
bool Find(int target, vector<vector<int> > array)
{
int cursize = array.size();//当前数组元素个数
int column = array[0].size();//列数
int row = 0;//目前定位于左上角第一个元素
int col = column - 1;//-1可以想成列下标
bool result = false;
if(cursize < 0 || col < 0)
return false;
while(row < cursize && col >= 0)
{
if(array[row][col] == target)
{
result = true;
break;
}
else if(array[row][col] < target)
{
row++;
}
else
{
col--;
}
}
return result;
}
void Judge(int target, vector<vector<int> > array)
{
if(Find(target,array))
{
cout<<target<<" "<<"OK!"<<endl;
}
else
{
cout<<target<<" "<<"NOT!"<<endl;
}
return;
}
};
int main()
{
vector<vector<int> > vec(4,vector<int>(4));
int br[4][4] = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
for(int i = 0;i < 4;i++)
{
for(int j = 0;j < 4;j++)
{
vec[i][j] = br[i][j];
}
}
Solution s;
s.Judge(7,vec);
s.Judge(5,vec);
s.Judge(0,vec);
s.Judge(15,vec);
s.Judge(100,vec);
return 0;
}
结果显示:
C语言实现版本:用到了二分查找,因为数据有序
//二分查找
int Binary(int *ar,int len ,int key)
{
int left = 0;
int right = len - 1;
int mid;
while(left <= right)
{
mid = (left + right)/2 ;
if(key == ar[mid])
{
return mid;
}
else if(ar[mid] < key)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
return mid;
}
bool Search(int (*ar)[4],int key)
{
int index = 3;
for(int i = 0;i < 4;i++)
{
index = Binary(ar[i],index + 1,key);
if(index < 0) return false;
if(key == ar[i][index])//找到了
{
return true;
}
}
return false;
}
int main()
{
int ar[4][4] = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
int key = 7;
if(Search(ar,key))
{
printf("true\n");
}
else
{
printf("false\n");
}
return 0;
}
结果显示: