zoukankan      html  css  js  c++  java
  • 剑指offer(一) 二维数组的查找

    题目描述

    在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
     
     第一种方法,在每一行进行二分查找,NlogN。
    第二种方法,也可能是最好的,因为已经是有序的,我们选取左下角或者右上角,每次进行判断大小,选择上移或者右移,这样每次都有贪心选择,但是这样的时间复杂度怎么确定呢?
     
    特别注意边界的判断!否则空指针异常。获得传进来的数组和获得下标之间尤其要判断。
     
    class Solution {
        public boolean Find(int target, int [][] array) {
            if(array.length == 0 ) return false;
            //从左下角开始
            int r = array.length - 1;
            int l = 0;
            while(true) {
                if(r<0 || l>array[0].length-1) return false;
    
                if(array[r][l] > target) {
                    r--;
                }else if(array[r][l] < target) {
                    l++;
                }else {
                    return true;
                }
            }
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            int a = 16;
            int[][] array = {};
            Solution so = new Solution();
            System.out.println(so.Find(16,array));
    
        }
    }
    class Solution {
        public boolean Find(int target, int [][] array) {
    
            for(int i = 0; i < array.length; i++) {
                int l = 0;
                if(array.length<=0) return false;
                if(array[0].length<=0) return false;
    
                int r = array[0].length-1;
                while(l<=r) {
                    int mid = (l+r)/2;
                    if(target>array[i][mid]) {
                        l = mid+1;
                    }
                    else if(target<array[i][mid]) {
                        r = mid-1;
                    }
                    else
                        return true;
                }
            }
            return false;
    
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            int a = 16;
            int[][] array = {{1,3,4},{3,16,1}};
            Solution so = new Solution();
            System.out.println(so.Find(16,array));
    
        }
    }
  • 相关阅读:
    du
    date
    echo
    redis的多实例
    redis相关配置
    mariadb的安装与主从复制
    11.Flask-钩子函数
    Python之Linux下的virtualenv&&virtualenvwrapper
    Linux的防火墙概念
    安装ipython解释器
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7788971.html
Copyright © 2011-2022 走看看