Search a 2D Matrix II

简介: 搜索2维数组;如果数组中存在目标值,返回true,否则返回false Write an efficient algorithm that searches for a value in an m x n matrix.

搜索2维数组;如果数组中存在目标值,返回true,否则返回false

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:

  • Integers in each row are sorted in ascending from left to right.
  • Integers in each column are sorted in ascending from top to bottom.

For example,

Consider the following matrix:

[
  [1,   4,  7, 11, 15],
  [2,   5,  8, 12, 19],
  [3,   6,  9, 16, 22],
  [10, 13, 14, 17, 24],
  [18, 21, 23, 26, 30]
]

Given target = 5, return true.

Given target = 20, return false.

遍历的话肯定效率低下。设立游标移动搜索。那么问题是从哪里开始搜索?

比较好的办法是从右上角开始。如果右上角的数字大于target,那么这一列没有target;向左一列移动

如果小于target,那么这一行没有target,向下一行移动

搜索停止的条件就是越界

 

Java代码:

 1 package com.rust.cal;
 2 
 3 public class Searcha2DMatrixII {
 4 
 5     public static boolean searchMatrix(int[][] matrix, int target) {
 6         if (matrix.length == 0 || matrix[0].length == 0) {
 7             return false;
 8         }
 9         int dy = matrix[0].length - 1;
10         int delta = matrix[0][dy];
11         int dx = 0;
12         while(dx < matrix.length && dy >= 0){
13             if (matrix[dx][dy] == target) {
14                 return true;
15             } else if (matrix[dx][dy] < target) {
16                 dx++;
17             } else {
18                 dy--;
19             }
20         }
21         return false;
22     }
23     public static void main(String args[]){
24         int matrix[][] = {
25                 {1 ,2 ,3 ,4 ,9 },
26                 {6 ,7 ,8 ,10,19},
27                 {17,18,30,31,32}
28         };
29         
30         int matrix1[][] = {
31                 {1,2},
32                 {4,5},
33                 {6,17},
34                 {10,20}
35         };
36         
37         int matrix2[][] = {
38                 {1,3,5,7,9,13,17},
39                 {2,4,6,8,10,16,20}
40         };
41         
42         System.out.println("matrix has 17?  " + searchMatrix(matrix, 17));
43         System.out.println("matrix has 18?  " + searchMatrix(matrix, 18));
44         System.out.println("matrix has 19?  " + searchMatrix(matrix, 19));
45         System.out.println("matrix1 has 4?  " + searchMatrix(matrix1, 4));
46         System.out.println("matrix2 has 4?  " + searchMatrix(matrix2, 4));
47         
48     }
49 }

输出:

matrix has 17?  true
matrix has 18?  true
matrix has 19?  true
matrix1 has 4?  true
matrix2 has 4?  true

 

目录
相关文章
|
Java 数据库连接 Maven
springboot集成mybatis时提示找不到Mapper Bean
springboot集成mybatis时提示找不到Mapper Bean
|
设计模式 前端开发 Java
总结丨Spring 源码学习,看这一篇就够了
在日常工作中,产品不断写业务需求,他们加班一天,我们开发就得工作一周来完成。 业务领域达到一定地步后,发现日常编写业务代码已经很难让我有突破性的进步,日复一日,担心自己变成一个业务代码生产机器,而无法面对新技术和环境变化。 同时也有危机感,长江后浪推前浪,自己不继续学习的话,很快就会有人超过。 而且我算是比较热心的好同学,喜欢帮别人解决问题和记录解决方案,所以不希望在别人问我工作中有什么常用的框架,遇到这个问题该怎么办,我却回答不上的感觉
7666 1
总结丨Spring 源码学习,看这一篇就够了
|
IDE Java Maven
idea2020版Maven依赖成功导入但仍然报错找不到包解决
idea2020版Maven依赖成功导入但仍然报错找不到包解决
1848 0
idea2020版Maven依赖成功导入但仍然报错找不到包解决
|
安全 关系型数据库 数据库
Postgresql 数据库用户权限授权(用户角色分配模式)
为了更方面和安全地管理数据库用户账号权限安全,实现通过用户角色代理的模式,实现用户账号功能授权的模式
19490 2
Postgresql 数据库用户权限授权(用户角色分配模式)
|
Dubbo Java 应用服务中间件
微服务框架Dubbo环境部署实战
微服务框架Dubbo环境部署的实战指南,涵盖了Dubbo的概述、服务部署、以及Dubbo web管理页面的部署,旨在指导读者如何搭建和使用Dubbo框架。
979 17
微服务框架Dubbo环境部署实战
|
算法 Java JavaScript
规则引擎
我是阿里巴巴做规则引擎相关工作多年的java工程师一枚,本职工作就是通过规则引擎、规则管理平台等技术输出,来应对阿里巴巴复杂多变的上层规则相关业务的支持。限于技术保密、安全等因素,本文只讲一些个人对“规则引擎”的看法,欢迎大家一起探讨。
26678 1
|
11月前
|
IDE Java 应用服务中间件
Java“ClassNotFoundException”解决
Java中的“ClassNotFoundException”表示JVM找不到指定的类。解决方法包括:确保类路径正确、检查依赖是否完整、确认类名无误、清理和重新构建项目等。
2169 0
|
Java
线程 - 一句话说明白 Java 线程池中 shutdown 和 shutdownNow 的区别
线程 - 一句话说明白 Java 线程池中 shutdown 和 shutdownNow 的区别
720 0
|
存储 Java 应用服务中间件
Java规则引擎Drools急速入门
Java规则引擎Drools急速入门
Java规则引擎Drools急速入门
|
XML Java 数据库连接
解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题
解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题
14012 2
解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题