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));
    
        }
    }
  • 相关阅读:
    Win32K里的死循环
    Oracle 经常使用命令小结
    ImageView 会盖掉ScrollView的OnTouchListener,监听Activity的手势
    怎样安装pip--python的包管理工具
    设计模式-模板方法
    django中怎样生成非HTML格式的内容。
    SharePoint 2013 设置自己定义布局页
    Android读写JSON格式的数据之JsonWriter和JsonReader
    基于Linux 3.0.8 Samsung FIMC(S5PV210) 的摄像头驱动框架解读(一)
    BZOJ-1923-外星千足虫-SDOI2010
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7788971.html
Copyright © 2011-2022 走看看