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));
    
        }
    }
  • 相关阅读:
    Navicat 回复 psc 文件 Mysql
    android SDK 更新问题完美解决 http://dl-ssl.google.com refused
    利用android来赚钱
    苹果应用 Windows 申请 普通证书 和Push 证书 Hbuilder 个推(2)
    苹果应用 Windows 申请 普通证书 和Push 证书 Hbuilder 个推
    Java version 32转64位
    浅谈Jquery中的bind()、live()、delegate()、on()绑定事件方式
    JavaScript之深浅拷贝
    关于一道JS面试题的思考
    EasyUI-Tooltip(提示框)学习
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7788971.html
Copyright © 2011-2022 走看看