zoukankan      html  css  js  c++  java
  • 二维数组中的查找

    题目描述:
    在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
    题目来源
    http://ac.jobdu.com/problem.php?pid=1384
    题目分析:
    假设数组有m行、n列,待查找元素为t
    由于数组行、列均为递增排序,那么对于一个元素data[i][j]和待查找元素比较有三种情况
    (1)data[i][j] = t, 那么得到结果,返回
    (2)data[i][j] < t, 那么(i,j)左下方的元素都小于t,可以将这部分排除
    (3)data[i][j] > t, 那么(i,j)右上方的元素都大于t,可以将这部分排除
    考虑一个比较特殊的右上角位置(1,n),若data[1][n] = t, 那么得到结果,返回,若data[1][n] < t,那么可以排除第1行,若data[1][n] > t,那么可以排除第n列,问题变成在删除第1行或者第n列的子数组中查找t,将当前位置更新到现在数组的右上角,重复之前的操作,直到找到t或者整个数组被删除掉
    时间复杂度:O(m + n)
    示例代码:
    int data[m][n];
    
    bool run(int m, int n, int t) {
        int x = 0, y = n - 1;
    
        while(x < m && y >= 0) {
            if(data[x][y] == t) {
                return true;
            } else if(data[x][y] < t) {
                ++x;
            } else {
                --y;
            }
        }
    
        return false;
    }
  • 相关阅读:
    attr 修改IMG src
    64转2
    :eq
    DOM0和D0M2级事件
    c's's透明度
    span标签 宽度无效解决方案
    CSS 点击事件
    input点击后的 默认边框去除
    js
    CSS 的 ID 和 Class 有什么区别,如何正确使用它们。
  • 原文地址:https://www.cnblogs.com/daijinqiao/p/3328728.html
Copyright © 2011-2022 走看看