剑指Offer——二维数组中的查找
题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析:
因为二维数组中,从左到右和从上到下都是递增排序,可以从右上角往左下角查找(或者从左下角往右上角查找),只需O(n)的时间复杂度,不需要遍历整个数组,那样时间复杂度是O(n^2)。从右上角往左下角查找,如果该位置的数比目标小,就往左移一位;比目标大,就往下移一位;相等则找到了,查找停止。
代码:
1 class Solution { 2 public: 3 bool Find(int target, vector<vector<int> > array) { 4 int row = array.size(); 5 int col = array[0].size(); 6 int i = 0, j = col - 1; // 从右上角往左下查找 7 while(i < row && j >= 0) { 8 if(array[i][j] == target) return true; // 找到了 9 if(array[i][j] > target) { // 往左查找 10 j--; 11 continue; 12 } 13 if(array[i][j] < target) { // 往下查找 14 i++; 15 continue; 16 } 17 } 18 return false; 19 } 20 };