C语言——oj刷题——杨氏矩阵

目录

[1. 理解杨氏矩形的特点](#1. 理解杨氏矩形的特点)

[2. 实现杨氏矩形查找算法](#2. 实现杨氏矩形查找算法)

[3. 编写示例代码](#3. 编写示例代码)


当我们谈到杨氏矩形时,我们指的是一种在二维数组中查找目标元素的高效算法。它是由杨氏(Yan Shi)教授提出的,因此得名为杨氏矩形。

杨氏矩形问题的场景是这样的:给定一个有序的二维数组,每一行从左到右递增,每一列从上到下递增。我们需要在这个二维数组中快速查找某个目标元素是否存在。

为了更好地理解和解决这个问题,我们将分为以下几个步骤进行讲解和编码示例:

  1. 理解杨氏矩形的特点
  2. 实现杨氏矩形查找算法
  3. 编写示例代码

1. 理解杨氏矩形的特点

杨氏矩形的特点是每一行从左到右递增,每一列从上到下递增。这意味着我们可以通过比较目标元素和当前元素的值来缩小查找范围。

具体来说,我们可以从矩形的右上角开始查找。如果目标元素比当前元素大,则目标元素必然不在当前元素的同一行,因此可以排除当前元素所在的行;如果目标元素比当前元素小,则目标元素必然不在当前元素的同一列,因此可以排除当前元素所在的列。通过这种方式,我们可以逐步缩小查找范围,直到找到目标元素或查找范围为空。

2. 实现杨氏矩形查找算法

基于上述特点,我们可以设计一个高效的杨氏矩形查找算法,具体步骤如下:

  • 初始化当前元素为矩形的右上角元素
  • 循环执行以下步骤:
    • 如果当前元素等于目标元素,则返回找到目标元素的位置
    • 如果目标元素比当前元素大,则将当前元素下移一行
    • 如果目标元素比当前元素小,则将当前元素左移一列
  • 如果循环结束仍未找到目标元素,则返回未找到的结果

3. 编写示例代码

下面是一个使用C语言编写的示例代码,演示如何实现杨氏矩形查找算法:

cpp 复制代码
#include <stdio.h>
#include <stdbool.h>

bool yangsMatrixSearch(int matrix[3][3], int target) {
    int rows = 3; // 矩阵的行数
    int cols = 3; // 矩阵的列数

    // 初始化当前元素为矩阵的右上角元素
    int row = 0;
    int col = cols - 1;

    // 循环查找
    while (row < rows && col >= 0) {
        if (matrix[row][col] == target) {
            return true; // 找到目标元素
        } else if (matrix[row][col] < target) {
            row++; // 目标元素比当前元素大,下移一行
        } else {
            col--; // 目标元素比当前元素小,左移一列
        }
    }

    return false; // 未找到目标元素
}

int main() {
    int matrix[3][3] = {
        {1, 4, 7},
        {2, 5, 8},
        {3, 6, 9}
    };
    int target = 5;

    bool found = yangsMatrixSearch(matrix, target);

    if (found) {
        printf("目标元素 %d 存在于矩阵中\n", target);
    } else {
        printf("目标元素 %d 不存在于矩阵中\n", target);
    }

    return 0;
}

在上述示例代码中,我们定义了一个**yangsMatrixSearch**函数,该函数接受一个二维数组(矩阵)和目标元素作为参数。函数内部实现了杨氏矩形查找算法。

在**main函数中,我们定义了一个3x3的矩阵和一个目标元素。然后,调用yangsMatrixSearch**函数来查找目标元素是否存在于矩阵中,并根据查找结果打印相应的信息。

希望这篇博客能够帮助你理解杨氏矩形问题,并提供了详细的讲解和代码示例。如果有任何疑问,请随时向我提问。

相关推荐
CoovallyAIHub9 小时前
Moonshine:比 Whisper 快 100 倍的端侧语音识别神器,Star 6.6K!
深度学习·算法·计算机视觉
CoovallyAIHub10 小时前
速度暴涨10倍、成本暴降6倍!Mercury 2用扩散取代自回归,重新定义LLM推理速度
深度学习·算法·计算机视觉
CoovallyAIHub10 小时前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github
CoovallyAIHub11 小时前
开源:YOLO最强对手?D-FINE目标检测与实例分割框架深度解析
人工智能·算法·github
CoovallyAIHub11 小时前
OpenClaw:从“19万星标”到“行业封杀”,这只“赛博龙虾”究竟触动了谁的神经?
算法·架构·github
刀法如飞11 小时前
程序员必须知道的核心算法思想
算法·编程开发·算法思想
徐小夕13 小时前
pxcharts Ultra V2.3更新:多维表一键导出 PDF,渲染兼容性拉满!
vue.js·算法·github
CoovallyAIHub14 小时前
OpenClaw一脚踩碎传统CV?机器终于不再只是看世界
深度学习·算法·计算机视觉
CoovallyAIHub14 小时前
仅凭单目相机实现3D锥桶定位?UNet-RKNet破解自动驾驶锥桶检测难题
深度学习·算法·计算机视觉