题目描述

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
 
下面是我实现的代码,修改下类名(Solution)和方法名(Find)通过了牛客网的测试用例

 public class No2Array{
public static void main(String[] args){
int[][] array={{1,2,8,9},
{2,4,9,12},
{4,7,10,13},
{6,8,11,15}};
System.out.println(findByTheUpperRightCorner(5,array));
System.out.println(findByTheLowerLeftCorner(7,array));
} /*
* 选取数组查找范围内的右上角的数字,如果该数字等于要查找的数字,则查找结束。
* 如果该数字小于要查找的数字,则剔除该数字所在的行;
* 如果该数字大于要查找的数字,则剔除该数字所在的列;
*/
public static boolean findByTheUpperRightCorner(int target, int [][] array) {
if(array.length>0){
int rows=array.length;
int columns=array[0].length;
int row=0;
int column=columns-1;
while(row<rows&&column>=0){
if(array[row][column]==target)
return true;
if(array[row][column]>target)
column--;
else
row++;
}
return false;
}
return false;
} /*
* 选取数组查找范围内的左下角的数字,如果该数字等于要查找的数字,则查找结束;
* 如果该数字小于要查找的数字,则剔除该数字所在的列;
* 如果该数字大于要查找的数字,则剔除该数字所在的行;
*/
public static boolean findByTheLowerLeftCorner(int target,int[][] array){
if(array.length>0){
int rows=array.length;
int columns=array[0].length;
int row=rows-1;
int column=0;
while(row>=0&&column<columns){
if(array[row][column]==target)
return true;
if(array[row][column]<target)
column++;
else
row--;
}
return false;
}
return false;
}
}

通过选取右上角和左上角的两种实现思路都给出了实现代码,明白其中一个原理另外一个也就很容易了。关键是不能选取左上角或者右下角的数组作为对比,比如选取左上角的数字小于查找的值,那么该数字的下面数字和右面数字都有可能是要查找的范围,这样无法缩小查找范围。所以只要知道从右上角或者左下角进行查找就很容易解决了。

剑指offer编程题Java实现——二维数组中的查找的更多相关文章

  1. 剑指Offer(一):二维数组中的查找

    一.前言 刷题平台:牛客网 二.题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整 ...

  2. 剑指Offer:面试题3——二维数组中的查找(java实现)

    问题描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:取数组中的元素与 ...

  3. 【剑指offer】面试题 4. 二维数组中的查找

    面试题 4. 二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...

  4. 剑指Offer面试题:2.二维数组中的查找

    一.题目:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  5. 剑指offer——面试题4:二维数组中的查找

    // 面试题4:二维数组中的查找 // 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按 // 照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个 // 整数 ...

  6. 剑指offer 面试题4:二维数组中的查找

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  7. 剑指Offer(书):二维数组中的查找

    题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

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

    题目 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 示例: 现 ...

  9. 《剑指offer》面试题04. 二维数组中的查找

    问题描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 示例: ...

随机推荐

  1. 2017 ZSTU寒假排位赛 #2

    题目链接:https://vjudge.net/contest/147632#overview. A题,状态压缩一下然后暴力即可. B题,水题,略过. C题,有负数,前缀和不是单调的,因此不能用尺取法 ...

  2. StackExchange.Redis 官方文档(四) KeysScan

    KEYS, SCAN, FLUSHDB 方法在哪? 经常有人问这些问题: 好像并没有看到 Keys(...) 或者 Scan(...)方法?那我要怎么查询数据库里面存有哪些key? 或者 好像没有Fl ...

  3. 公众号第三方平台开发-aes解密失败

    公众号第三方平台开发-aes解密失败 问题:本地启动项目,配置域名,测试微信公众号,系统正常运行:将项目部署到测试环境执行同样的操作,系统报错,错误异常:aes解密失败..... 调试--寻找问题-- ...

  4. android开发学习——day3

    关于android开发的详细过程了解 Android App程序的四种重要组成类型:1.Activity 2.Service 3.Content Provider 4.Broadcast Receiv ...

  5. 初识Google code jam平台

    为了熟悉一下code jam的平台,今天简单试了一下,做了一下Qualification Round Africa 2010的三道题目,都是很基础的. A题:给一个数n和一系列数a[],从a[]中找出 ...

  6. GP项目总结(一)

    1.使用activity渲染不同的View时,两种方法: (1.)自定义两个不同的View,然后在mainActivity里根据不同的数据使用不同的View,通过addView()来Activity里 ...

  7. radioButton添加试题选项webview(二)

    由于项目里radioGroup里,4个选项里加载的是webview,而不是radiobutton本身自己可设置的text类型,并且每个webview都需要和radiobutton对齐,所以这个布局有点 ...

  8. 【bzoj3998】 TJOI2015—弦论

    http://www.lydsy.com/JudgeOnline/problem.php?id=3998 (题目链接) 题意 给出一个字符串,求它的字典序第K小的子串是什么,分情况讨论不在同一位置的相 ...

  9. HDU-1395-2^x mod n = 1(数学题(二次出错))

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1395 这题一定要滴水不漏的把所有代码全部看完. 这个题目是一个数学类型的题,我也没思路,只知道n== ...

  10. SVG的基础使用

    SVG的基础使用: <%@ page language="java" contentType="text/html; charset=UTF-8" pag ...