二维数组中的值查找最优解算法

本文介绍了一种在特定排序方式下的二维数组中查找特定整数的方法。通过从左下角或右上角开始,根据目标值与当前值的比较结果来决定搜索方向,实现高效查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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

       思路:首先我们选择从左下角或右上角开始搜寻,(为什么不从左上角开始搜寻,左上角向右和向下都是递增,那么对于一个点,对于向右和向下会产生一个岔路;如果我们选择从左下脚开始搜寻的话,如果大于就向右,如果小于就向下)。

<span style="color:#000000;">	public boolean findNumber(int[][] array, int target) {
		int len = array.length - 1;
		int i = 0;
		while ((len >= 0) && (i < array[0].length)) {
			if (array[len][i] > target) {
				len--;
			} else if (array[len][i] < target) {
				i++;
			} else {
				return true;
			}
		}
		return false;
	}</span>




### C++ 中二维数组的应用场景和用法 #### 三维空间坐标表示 在计算机图形学中,经常需要用二维数组来存储物体表面的顶点坐标。例如,在一个简单的网格模型中,可以使用二维数组 `float vertices[rows][cols];` 来保存每一行每列对应的浮点数坐标[^1]。 ```cpp // 定义并初始化一个3x3矩阵用于表示简单平面网格上的点位置 float gridPoints[3][3] = { {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, {2.0f, 2.0f, 2.0f} }; ``` #### 图像处理中的像素管理 图像本质上是由多个颜色通道组成的矩形区域,因此非常适合用二维数组来表达。对于灰度图而言,可以直接定义单精度浮点型或无符号字符类型的二维数组;而对于彩色图片,则可能需要三重循环访问RGB三个分量。 ```cpp #include <iostream> using namespace std; int main() { const int width = 800; const int height = 600; unsigned char image[height][width]; // 初始化为纯白色 for (int y=0; y<height; ++y){ for(int x=0; x<width; ++x){ image[y][x]=255; } } cout << "Image initialized." << endl; return 0; } ``` #### 动态规划算法实现 当涉及到路径寻找、最短路等问题时,通常会采用动态规划的方法求解最优解。此时往往需要用到二维表记录中间状态以便后续查找利用,从而减少重复计算提高效率。 ```cpp const int MAXN = 100; long long dp[MAXN][MAXN]; void initDP(){ fill(&dp[0][0], &dp[MAXN-1][MAXN]+1, LLONG_MAX); } bool solveProblem(/* parameters */){ /* implementation */ } ``` #### 使用 `std::vector` 实现动态增长的二维数组 除了静态分配外,还可以借助标准库容器类模板 `std::vector` 构建更加灵活多变的二维向量对象。这种方式允许程序员根据具体需求调整大小而不必担心内存溢出风险[^2]。 ```cpp #include<vector> typedef vector<int> IntVec; typedef vector<IntVec> Matrix; Matrix createDynamicMatrix(size_t rows, size_t cols) { return Matrix(rows, IntVec(cols)); } int main(){ auto mat = createDynamicMatrix(4,5); // 创建4*5的整数矩阵 // 访问元素 mat[0][0] = 10; return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lz_94

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值