剑指Offer的学习笔记(C#篇)-- 二维数组中的查找

题目描述

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

一 . 解题思路

        该题目有两个重要条件!该数组从左到右以及从上到下均为递增,这样我们可以在右上或者左下下手,为什么不是左上或者右下呢,因为这两个点是极限点,看下面的图差不多应该好懂一些吧!下图是以右上为开始点干的。。

        也就是说,我们要查找的这个数,从右上开始一个个的去尝试。

         如果这个数等于右上角的数,则返回正确。

         如果这个数大于右上角的数,那么直接删除这一行,因为这一行中,最大的就是右面的那个了,所以呢,接下来,只需要考虑处了这一行以外的数了。

         如果这个数小于右上角的数,那么直接删除这一列,道理同上!

         如果不是第一种情况,删除一行或者一列后,那么接下来呢,再次选择右上角的点,继续执行上述工作。

二 . 代码实现

复制代码
class Solution
{
    public bool Find(int target, int[][] array)
    {
        //把参考的数定义到右上角
        int row=0;
        int col=array[0].Length-1;
        //循环操作过程
        while(row<=array.Length-1&&col>=0)
        {
            //若相等,则返回正确
            if(target==array[row][col])
            {
                return true;
            }
            //若大于,则把row+1,即相当于删除了那一行
            else if(target>array[row][col])
            {
                row++;
            }
            //否则,col-1,相当于删除了最右面的列
            else
            {
                col--;
            }
        }
        //如果执行结束了,还没查到,那就是没有!!
        return false;
    }
}
复制代码

 

posted @   WeiMLing  阅读(798)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示