博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Search a 2D Matrix II
阅读量:6063 次
发布时间:2019-06-20

本文共 2295 字,大约阅读时间需要 7 分钟。

搜索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?  truematrix has 18?  truematrix has 19?  truematrix1 has 4?  truematrix2 has 4?  true

 

转载地址:http://ssvrx.baihongyu.com/

你可能感兴趣的文章
linux学习笔记-SELinux
查看>>
单例模式的八种写法比较
查看>>
消息中心
查看>>
客户端编程
查看>>
13-SCVMM2012之创建配置文件
查看>>
如何在自己的所擅长的领域简历优势
查看>>
DockerFiler使用
查看>>
在MYSQL中 如何查询排名数
查看>>
互联网思维下的码农新生态
查看>>
前端开发如何抠图
查看>>
Vue.js学习系列(三十八)-- Vue.js表单 (二)
查看>>
memcache与memcached的区别
查看>>
ps命令详解
查看>>
Linux中怎样根据文件名长度进行排序
查看>>
Aspose.Words 9月新本V17.9发布 | 修复多个重大bug
查看>>
活动目录管理之域重命名
查看>>
PDF控件PDF Creator V5.5.2.3发布 | 支持插入PDF417条形码
查看>>
我的友情链接
查看>>
Fragment之间的通信
查看>>
编程成长日记——求素数
查看>>