剑指offer---二维数组中的查找

class Solution
{
public:
    bool Find(int target, vector<vector<int> > array)
    {
        int HangShu = array[0].size();
        int LieShu = array.size();
        int i = 0;
        int j = (LieShu - 1);
        int flag = 0;

        while ((i < HangShu) && (j >= 0))
        {
            if (array[i][j] < target)
            {
                ++i;
            }
            else if (array[i][j]>target)
            {
                --j;
            }
            else
            {
                flag = 1;

                break;
            }
        }
        if (flag == 0)    return false;
        else return true;
    }
};
时间: 2024-12-14 02:46:45

剑指offer---二维数组中的查找的相关文章

剑指offer——二维数组中的查找

题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. # -*- coding:utf-8 -*- class Solution: # array 二维列表 def Find(self, target, array): # write code here row=0 col=len(array[0])-1 while(row<len(array)

剑指offer—二维数组中找数

题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 基本思想: 首先选取数组中右上角的数字.如果=要找的数字,结束.如果大于要找的数字,剔除这个数字所在的列:如果小于要找的数字,剔除这个数字所在的行. #include <iostream> using namespace std; void find(int a[][4],int rows,int columns,int

剑指Offer_4_二维数组中的查找

题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 例 :     1   2    8     9 2   4    9    12 4   7   10   13 6   8   11   15 在这个数组中查找数字 9 ,  则返回true . 查找数子5 ,则返回false . 分析 : 因为二位数组每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺

剑指offer--1.二维数组中的查找

题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:从左下角开始寻找,如果小于target,就往右找,如果大于target就往上找. function Find(target, array) { var r = array.length; var c = array[0].length; var i = r-1; var j = 0; whil

C#版剑指Offer-001二维数组中的查找

题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.例如:下面的二维数组就是每行.每列都递增排序.如果在这个数组中查找数字7,则返回true:如果查找数字5,由于数组不含有该数字,则返回false. 解题思路 看到该题目想到的最简单暴力做的做法就是直接遍历数组查找.但是实际上一般都要用效率更高的做法,该题目有两个重要条件,从左到右递增,从上到下递增

剑指Offer1:二维数组中的查找

一:题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.二:解题思路:target值为要找的数<第1种>暴力搜索,两重for循环遍历.时间复杂度O(n^2)<第2种>从数组最右上或最左下开始.时间复杂度O(n)如图:右上: 如果target值小于当前数组的值,则只用将数组列减一:如果target值大于当前数组的值,则只用将数组行加一.左

剑指offer_02_二维数组中的查找

#include <iostream> using namespace std; bool ifHasNum(int *data,int row, int col, int num){ if(data == NULL || row <= 0 || col <= 0){ return false; } int i = 0; int j = col - 1; while(i < row && j >= 0){ if(num == data[i * col +

剑指offer-3.二维数组中查找

0 题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列按照从上到下递增顺序排序 请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有这个整数. 1 分析 凡是数组有序的首先要想到的是二分查找. 这个二维数组的特点在于,数组中某个点,在该点,右.下方的数都比该数大.左.上的都比该数小. 但是同时判断两个相同维度,比较麻烦. 因此先判断两个不同的维度.也就是说,判断某个点右面和下面,或是左面和上面.那么其中一个方向是大的,另一个方向是小的. 以判断右面和下面为例: 去左

剑指offer:二维数组的查找

题目:二维数组的查找 思路: 由于二维数组是从左到右,从上到下是递增的,所以可以从右上角或者左下角开始选择, 比如从右上角开始, 右上角的值都比目标值大的话,而右上角所在列的值都比右上角的值大,则所在列排除. 右上角的值都比目标值小的话,而右上角所在行的值都比右上角的值小,则所在行排除. 以此类推,查找会以行或者列的范围进行缩小.直到得到与目标值相同的值或者没有相同值. 图解: 而右上角所在列的值都比目标值大,则排除所在列. 有 图解: 代码: class Solution { public b

【剑指Offer面试题】二维数组中的查找

下决心AC所有剑指offer面试题. 九度OJ面试题地址:http://ac.jobdu.com/hhtproblems.php 书籍:何海涛--<剑指Offer:名企面试官精讲典型编程题> 对于面试题,面试官往往更希望我们能提出优化方法,这样更能体现我们的思维能力以及传说中的"内功".所以做剑指offer要着重训练这方面,多总结多细究,总是有好处的.加油~ 二维数组中的查找 时间限制:1 秒内存限制:32 兆 特殊判题:否提交:19005解决:3642 题目描述: 在一个