牛客网C++编程题(一) 二维数组中的查找
2017-10-26 19:51
267 查看
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。class Solution { public: bool Find(int target, vector<vector<int> > array) { // TDDO: }
解题思路
此题不适用于使用二分法,因为数组并不是严格有序的数组观察题干,可知数组最左侧的元素是关键,因为从最左列元素出发,向左遍历和向下遍历都是依次增大的(其实数组中的每个元素都有这个特性,下述就依照这个特性进行判断)
假设数组为m*n,所以可以使用左下角元素值array[m-1][n-1]当前元素值(记为a)出发,进行判断:
若a大于目标值(记为A),则a所在的行其它元素不满足比对条件(因为一定比A大),此时只需将a的行值rows-1,然后再将所在的元素值与A比较...若a小于A,则按2处理
如果a小于A,则增加a的列数cols+1,若a大于A,则按1处理
程序在步骤1、2中循环
跳出条件——列数大于数组宽度,行数小于0
代码
// Summary: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 // 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 // Author: Amusi // Date: 2017-10-27 // Reference: https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId=13&tqId=11154&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking #include <iostream> #include <vector> using namespace std; // 函数申明 bool Find(int target, vector<vector<int> > array); int main() { vector<vector<int>> arraySum; vector<int> array1; vector<int> array2; vector<int> array3; vector<int> array4; // 测试数据 // cols for (int i = 0; i < 10; ++i) { array1.push_back(i); } for (int i = 10; i < 20; ++i) { array2.push_back(i); } for (int i = 20; i < 30; ++i) { array3.push_back(i); } for (int i = 30; i < 40; ++i) { array4.push_back(i); } // rows arraySum.push_back(array1); arraySum.push_back(array2); arraySum.push_back(array3); arraySum.push_back(array4); // 调用缩写函数 bool flag = Find(25, arraySum); if (flag) cout << "find..."<< endl; else cout <<"Not find..." << endl; return 0; } bool Find(int target, vector<vector<int> > array) { int m = array.size(); int n = array[0].size(); int rows = m - 1; int cols = 0; if (m == 0 && n == 0) return false; while (rows >= 0 && cols < n) { if (target < array[rows][cols]) { --rows; } else if (target > array[rows][cols]) { ++cols; } else return true; } return false; }
总结
审题极为重要,理解了题目信息,对解题事半功倍相关文章推荐
- 牛客网-剑指Offer-二维数组的查找
- 牛客网-剑指Offer-二维数组中的查找
- 牛客网刷题之二维数组中的查找
- 牛客网刷题|二维数组中的查找
- 牛客网-《剑指offer》-二维数组中的查找
- 牛客网-剑指Offer-二维数组的查找
- 牛客网-剑指offer-二维数组查找
- 剑指Offer——二维数组中的查找——C++
- 牛客网-剑指Offer-二维数组的查找
- 二维数组中的查找(C++和Python实现)
- 牛客网-剑指Offer-二维数组的查找
- 全国计算机等级二级C++第四章习题编程题6 :编写一个函数 char *strfind(char *s, char *t),用于查找字符串t在字符串s中最右边出现的位置,如果没有找到则返回NULL.
- 牛客网-剑指Offer-二维数组的查找
- 剑指offer第一题【二维数组中的查找】c++实现
- #数据结构与算法学习笔记#剑指Offer1.5:二维数组中的查找(C++)
- 牛客网刷题---二维数组中的查找(剑指offer)
- 牛客网-剑指Offer-二维数组的查找
- 编程题——二维数组中查找
- 牛客网python算法练习(三)二维数组的查找
- 牛客网 二维数组中的查找