二维数组中的查找
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | /* * 在一个二维数组中,每一行都是按照从左到右 * 递增的顺序排序,每一列都是按照从上到下递增 * 的顺序排序。请完成一个函数,输入这样的一个 二位数组和一个整数,判断数组中是否含有该整数。 */ /* * 解法1:暴力搜索法,时间复杂度为O(n^2) */ #include<iostream> using namespace std; bool search_num( const int * nums, int rows, int cols, const int & num) { if (nums != nullptr && rows > 0 && cols > 0) { for ( int i = 0; i < rows; i++) { for ( int j = 0; j < cols; j++) { if (nums[i * cols + j] == num) { return true ; } } } } return false ; } int main() { const int rows = 4; const int cols = 4; const int lens = rows * cols; int * nums = new int [lens](); for ( int i = 0; i < lens; ++i) { nums[i] = i + 1; } int num; //要查找的数字 cin >> num; bool result = search_num(nums, rows, cols, num); if (result) { cout << "the matrix has this number." << endl; } else { cout << "the matrix do not has this number." << endl; } delete [] nums; nums = nullptr ; } /* *解法2:利用搜索数组的特性,首先选取数组中右上角的数字。如果该数字等于要查找的数字,则 * 查找结束;如果该数字大于要查找的数字,则剔除这个数字所在的列;如果这个数字小于要查找 的数字,则剔除这个数字所在的行。这样就可以一步一步的缩小范围了。* */ #include<iostream> using namespace std; bool Find( const int * matrix, int rows, int cols, const int & num) { if (matrix != nullptr && rows > 0 && cols > 0) { int row = 0; int col = cols - 1; while (row < rows && col >= 0) { if (matrix[row * cols + col] == num) { return true ; } else if (matrix[row * cols + col] > num) { col--; } else { row++; } } } return false ; } int main() { const int rows = 4; const int cols = 4; const int lens = rows * cols; int * nums = new int [lens](); for ( int i = 0; i < lens; ++i) { nums[i] = i + 1; } int num; //要查找的数字 cin >> num; bool result = Find(nums, rows, cols, num); if (result) { cout << "the matrix has this number." << endl; } else { cout << "the matrix do not has this number." << endl; } delete [] nums; nums = nullptr ; } |
posted on 2021-11-08 06:24 xcxfury001 阅读(20) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用