zoukankan      html  css  js  c++  java
  • 剑指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;
        }
    }
  • 相关阅读:
    腾讯测试开发岗一面二面上机编程题
    软件测试工程师职业发展漫谈
    学习 Python,这 22 个包怎能不掌握?
    Loj514「LibreOJ β Round #2」模拟只会猜题意
    后缀数组模板(倍增)
    USACO06DEC 牛奶模式
    BZOJ3680 JSOI2004 平衡点
    loj6278 数列分块入门题2
    loj6277 数列分块入门题1
    Codeforces 383C Propagating tree, 线段树, 黑白染色思想
  • 原文地址:https://www.cnblogs.com/WeiMLing/p/10889902.html
Copyright © 2011-2022 走看看