导语
所有的编程练习都在牛客网OJ提交,链接: https://www.nowcoder.com/ta/coding-interviews
九章算法的 lintcode 也有这本书的题目。https://www.lintcode.com/ladder/6/
第二章 面试需要的基础知识
【面试题3】二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
题解:每次删除一行,或者每次删除一列。每次选取数组右上角的数字,如果右上角数字等于target,直接返回true。如果右上角数组小于target,说明这一行都比target小,那么删除这一行。如果右上角数组大于taget,说明这一列都比target大,删除这一列。
1 class Solution { 2 public: 3 bool Find(int target, vector<vector<int> > array) { 4 int n = array.size(); 5 if (n == 0) {return false;} 6 int m = array[0].size(); 7 if (m == 0) {return false;} 8 int right = m - 1, up = 0; 9 while (up < n && right >= 0) { 10 if (array[up][right] == target) { 11 return true; 12 } else if (array[up][right] < target) { 13 up++; 14 } else if (array[up][right] > target) { 15 right--; 16 } 17 } 18 return false; 19 } 20 };