题目描述

      在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
     例 :     1   2    8     9
     2   4    9    12
     4   7   10   13
     6   8   11   15
    在这个数组中查找数字 9 ,  则返回true 。 查找数子5 ,则返回false 。
 
 分析 : 因为二位数组每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
      通常的思路可能是比较对角线,但是如果要查找的数相对于当前位置可能在两个区域出现,而且有重叠,
      那就麻烦了。
 
      所以一个更简单的方法是选取数组右上角的数字(当前数),要查找的数(目标数),如果当前数大于目标数,因为列是            按从上到下递增,那么当前数所在的一列就可以排除掉了,令当前数行标减一,成为新的当前数,再去做比较。
    例:

                     查找数字7 
 
          从右上角开始,当前数是9 , 9大于7 ,那么9所在的列不可能有数7 , 此列排除 。
              行标减一后生成新的二位数组,选定新的当前数8  , 8大于7 ,同理删去此列 。

                           当前数2 ,小于7 , 此时列表加一,去除第一行 。

                当前数4 ,小于7 ,此时列表加一,去除第一行 。

                当前数7 , 等于7 , 返回true。

   下面分别列出c++和Java实现

c++ :

 #include<bits/stdc++.h>

 using namespace std ;

 int main()
{
int a[][] = {
{,,,},
{,,,},
{,,,},
{,,,},
} ;
int n ;
cin >> n ; // 要查找的元素
int i= ;
int j= ;
while((i<=)&&(j>=)){
if(a[i][j]>n){
j-- ;
}else if(a[i][j]<n){
i++ ;
}else if(a[i][j]==n){
cout << "yes" <<endl ;
break ;
}
}
return ;
}

Java:

 import java.util.Scanner;

 public class Find {
public static void main(String[] args) {
int a[][] = {
{1, 2, 8, 9},
{2, 4, 9, 12},
{4, 7, 10, 13},
{6, 8, 11, 15},
};
int n ;
Scanner cin = new Scanner(System.in) ;
n = cin.nextInt() ;
int i=0 ;
int j=a.length - 1;
while((i<=3)&&(j>=0)){
if(a[i][j]>n){
j-- ;
}else if(a[i][j]<n){
i++ ;
}else if(a[i][j]==n){
System.out.println("yes");
break ;
}
}
}
}
           
 

剑指Offer_4_二维数组中的查找的更多相关文章

  1. (java)剑指offer二维数组中的查找

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

  2. 剑指Offer 二维数组中的查找

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

  3. 剑指offer--1.二维数组中的查找

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

  4. 剑指Offer——二维数组中的查找

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

  5. 剑指offer—二维数组中的查找

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

  6. C#版剑指Offer-001二维数组中的查找

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

  7. 剑指Offer-1.二维数组中的查找(C++/Java)

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

  8. 用js刷剑指offer(二维数组中的查找)

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

  9. 牛客网-剑指Offer 二维数组中的查找

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

随机推荐

  1. phpmailer 发送邮件(一)

    phpmailer下载地址: PHPMailer : https://github.com/PHPMailer/PHPMailer 一.基本要求 Web访问正常(apache可以正常访问) php 设 ...

  2. Python 解LeetCode:654. Maximum Binary Tree

    用一个整型数组构建一个二叉树,根结点是数组中的最大值,左右子树分别是根结点的值在数组中左右两边的部分. 分析,这是二叉树中比较容易想到的问题了,直接使用递归就行了,代码如下: class Soluti ...

  3. css定位讲解

    定位分三种:相对定位,绝对定位,固定定位;     相对定位:position:relatve;     绝对定位:position:absolute; 固定定位:position:fixed; 一, ...

  4. Set的常用方法(java)

    一.新增:重复新增的值会被覆盖 代码: Set<String> ss=new HashSet<String>(); ss.add("a");ss.add(& ...

  5. C#编写的艺术字类方法

    代码如下: using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing ...

  6. rpm打包过程

    [需求] 接触那么久的Linux,还没有试验过怎么打rpm包 [过程] 1.rpm打包准备工作 系统默认的rpmbuild的相关路径

  7. 73、django之setting配置汇总

    前面的随笔中我们经常会改setting配置也经常将一些配置混淆今天主要是将一些常见的配置做一个汇总. setting配置汇总 1.app路径 INSTALLED_APPS = [ 'django.co ...

  8. 程序、计算机程序、java初论

    一.程序? 程序一词来自生活,通常指完成某些事情的一种既定方式和过程,可以将程序看成对一系列动作的执行过程的描述. 例如:个人去银行取钱 1.带上存折/银行卡去银行 2.取号排队 3.将存折或储蓄卡递 ...

  9. SpringMVC集成Shiro、读取数据库操作权限

    1.Maven添加Shiro所需的jar包 <dependency> <groupId>org.apache.shiro</groupId> <artifac ...

  10. Tomcat 日志分割

    一.前言 随着每天业务的增长,Tomcat 的catalina.out日志 变得越来越大,占用磁盘空间不说.要查看某个时候的日志的时候,庞大的日志让你顿时无从下手,所以日志的切割的变得刻不容缓.而且, ...