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

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

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 from left to right.
  • The first integer of each row is greater than the last integer of the previous row.

 

For example,

Consider the following matrix:

[  [1,   3,  5,  7],  [10, 11, 16, 20],  [23, 30, 34, 50]]

Given target = 3, return true.

1 public class Solution { 2     public boolean searchMatrix(int[][] matrix, int target) { 3         // Start typing your Java solution below 4         // DO NOT write main() function 5         if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return false; 6         int i = 0; 7         for(; i < matrix.length; i ++){ 8             if(target < matrix[i][0]) { 9                 if(i < 1) return false;10                 for(int j = 0; j < matrix[i-1].length; j ++){11                     if(target == matrix[i-1][j]) return true;12                 }13                 return false;14             }15             else if(target == matrix[i][0]) return true;16         }17         for(int j = 0; j < matrix[i-1].length; j ++){18             if(target == matrix[i-1][j]) return true;19         }20         return false;21     }22 }

 第二遍:使用两次二分来加速。 一次是找到不大于target的col= 0的最值, 第二遍遍历这一row 然后找target。 如果找不到 就return false。

1 public class Solution { 2     public boolean searchMatrix(int[][] matrix, int target) { 3         // Start typing your Java solution below 4         // DO NOT write main() function 5         if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return false; 6         int start = 0, end = matrix.length - 1, mid = 0; 7         int i = 0, j = 0; 8         while(start <= end){ 9             mid = (start + end) / 2;10             int tmp = matrix[mid][0];11             if(tmp < target){12                 i = mid;13                 start = mid + 1;14             }else if(tmp == target) return true;15             else{16                 end = mid - 1;17             }18         }19         start = 0;20         end = matrix[0].length - 1;21         while(start <= end){22             mid = (start + end) / 2;23             int tmp = matrix[i][mid];24             if(tmp < target){25                 j = mid;26                 start = mid + 1;27             }else if(tmp == target) return true;28             else{29                 end = mid - 1;30             } 31         }32         return false;33     }34 }

 Step的方法:

1 public class Solution { 2     public boolean searchMatrix(int[][] matrix, int target) { 3         // Start typing your Java solution below 4         // DO NOT write main() function 5         if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return false; 6         int row = matrix.length - 1, col = 0; 7         while(row > -1 && col < matrix[0].length){ 8             if(matrix[row][col] > target) row --; 9             else if(matrix[row][col] < target) col ++;10             else return true;11         }12         return false;13     }14 }

 

转载于:https://www.cnblogs.com/reynold-lei/p/3348466.html

你可能感兴趣的文章
Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled.
查看>>
VMware安装Centos7超详细过程(图文)
查看>>
state模式实现游戏动画系统
查看>>
HTML 5 的自定义 data-* 属性和jquery的data()方法的使用
查看>>
iphone中点击input不能选中input中的内容
查看>>
MariaDB Galera Cluster 部署(如何快速部署MariaDB集群)
查看>>
1020: 部分A+B
查看>>
FM与FFM深入解析
查看>>
Java UDP网络编程 - 最简单示例
查看>>
区块链在零售业和银行业的广泛应用
查看>>
Hibernate or JPA Annotation中BLOB、CLOB注解写法
查看>>
[翻译]JWA(JEDI Windows API Headers)库的readmefirst.txt文件翻译
查看>>
秒杀系统(二)
查看>>
day23---ajax跨域解决---JSONP
查看>>
redis封装 get查询/删除key/keys查询
查看>>
移动端自适应js
查看>>
Pro Android学习笔记(三二):Menu(3):Context菜单
查看>>
java中用StringBuffer写文件换行
查看>>
c#ASP.NET中页面传值共有这么几种方式
查看>>
ios 截屏
查看>>