导语

所有的编程练习都在牛客网OJ提交,链接: https://www.nowcoder.com/ta/coding-interviews

九章算法的 lintcode 也有这本书的题目。https://www.lintcode.com/ladder/6/

 

第二章 面试需要的基础知识

【面试题3】二维数组中的查找

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

题解:每次删除一行,或者每次删除一列。每次选取数组右上角的数字,如果右上角数字等于target,直接返回true。如果右上角数组小于target,说明这一行都比target小,那么删除这一行。如果右上角数组大于taget,说明这一列都比target大,删除这一列。

【读书笔记】剑指offer
 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 };
View Code

相关文章: