牛客网C++编程题(一) 二维数组中的查找
来源:互联网 发布:interrupt用法c语言 编辑:程序博客网 时间:2024/06/05 21:51
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
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;// 测试数据// colsfor (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);}// rowsarraySum.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;elsecout <<"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;}elsereturn true;}return false;}
总结
审题极为重要,理解了题目信息,对解题事半功倍
阅读全文
0 0
- 牛客网C++编程题(一) 二维数组中的查找
- 二维数组中的查找【每日一题】
- 【C++】二维数组中的查找
- 算法学习记录一(C++)--->二维数组中的查找
- 牛客网 二维数组中的查找
- (牛客网)二维数组中的查找
- 【面试编程题】3-二维数组中的查找
- 牛客网剑指offer编程题--二维数组中的查找
- 实战编程-二维数组中的查找
- 每日一题(1) - 二维数组中的查找
- 算法练习一:二维数组中的查找
- 二维数组中的查找(C语言)
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- epoll 学习笔记
- Java基础知识--带标签的break和continue
- tomcat 搭建文件服务器 下载目录和服务器分离
- JQuery------获取<input type="file">中的文件内容
- SLAM
- 牛客网C++编程题(一) 二维数组中的查找
- C# 类和对象
- numpy中dot与*的区别
- 备份MySql数据库
- POJ-3624 Charm Bracelet dp
- Bug:[Android Pro] java.lang.IllegalStateException: Fragment(XXFragment) not attached to Activity异常
- Linux执行shell脚本
- Mac上安装xgboost
- 第18篇