首页 > 代码库 > C++算法之 二维数组的查找
C++算法之 二维数组的查找
题目:在一个二维数组当中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组
和一个整数,判断数组当中是否含有该整数。
思路:
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
每一行递增,如果右上角的数字小于要找的数字,那么这一行所有的数字都小于要找的数字;
每一列递增,如果右上角的数字大于要找的数字,那么这一列所有的数字都大于要找的数字;
bool Find(int* sz, int rows, int columns, int key){ bool found = false; if (sz == NULL || rows <= 0 || columns <= 0) { return found; } if (sz!=NULL && rows> 0 && columns>0) { int row = 0; int column = columns - 1; while (row < rows && column > 0) { if (sz[row*columns + column] == key) { found = true; break; } else if (sz[row*columns + column] > key) //如果右上角的数字大于要找的数字,那么删除此列 { column--; } else//如果右上角的数字小于小于要找的数字,删除此行; { row++; } } }}
完整测试代码:
// FindNumInSZ.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;bool FindNumOnMatrix(int* matrix, int rows, int columns,int number){ bool found = false; if (matrix != NULL && rows > 0 && columns >0) { int row = 0; int column = columns - 1; while (row < rows && column > 0) { if (matrix[row*columns + column] == number) { found = true; break; } else if (matrix[row*columns + column] > number) { --column; } else { ++row; } } return found; }}bool Find(int* sz, int rows, int columns, int key){ bool found = false; if (sz == NULL || rows <= 0 || columns <= 0) { return found; } if (sz!=NULL && rows> 0 && columns>0) { int row = 0; int column = columns - 1; while (row < rows && column > 0) { if (sz[row*columns + column] == key) { found = true; break; } else if (sz[row*columns + column] > key) //如果右上角的数字大于要找的数字,那么删除此列 { column--; } else//如果右上角的数字小于小于要找的数字,删除此行; { row++; } } }}int _tmain(int argc, _TCHAR* argv[]){ int sz[] = {1,2,8,9, 2,4,9,12, 4,7,10,13, 6,8,11,15 }; bool b = FindNumOnMatrix(sz,4,4,2); cout<<b<<endl; bool c = Find(sz,4,4,2); cout<<c<<endl; getchar(); return 0;}
二维数组可以尝试左上角,右上角,左下角,右下角等特殊的地方开始进行思考!
C++算法之 二维数组的查找
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。