编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
示例:现有矩阵 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]
]
给定 target = 5,返回 true。给定 target = 20,返回 false。

我的解决方法:

class Solution {public boolean searchMatrix(int[][] matrix, int target) {if (matrix == null) {return false;}// y纵向的长度int y = matrix.length;if (y == 0) {return false;}//x 横向的长度int x = matrix[y - 1].length;if (x == 0) {return false;}// 如果小于最小值  大于最大值 那么表示没有if (target < matrix[0][0] || target > matrix[y -1][x-1]){return false;}//最快的方式应是对角线查找int curX = 0;int curY = 0;for (; curX < x && curY <y ; curX++,curY++){//对角线if (matrix[curX][curY] == target){return true;}else if (matrix[curX][curY] >target){// 所有这行和这列的数//遍历这行for (int i = 0; i <curX ; i++ ){if (matrix[curY][i] == target) {return true;}}//遍历这列for (int i = 0; i <curY ; i++ ){if (matrix[i][curX] == target) {return true;}}}}//如果不是正方形矩阵  都没有找到的话 一行一行遍历
//        if (x > y) {
//
//        }else if (x <y ){
//
//        }// 横排已经遍历完了  遍历竖排即可if (curX >= x) {for (int i = curY; i < y; i++){for (int j : matrix[i]) {if (j == target) {return true;}}}}// 竖排已经遍历完了  遍历横排即可if (curY >=y){for (int i = curX; i < x; i++){for (int j = 0; j < y;j++){if (matrix[j][i] == target) {return true;}}}}return false;}
}

总结:
我的思路太复杂了,用对角线,还要对特殊情况(非正方形矩阵)进行特殊处理。

网上最快的解决方法:

class Solution {public boolean searchMatrix(int[][] matrix, int target) {if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return false;}int rows = matrix.length, cols = matrix[0].length;int r = 0, c = cols - 1;while (r < rows && c >= 0) {if (matrix[r][c] == target) {return true;} else if (matrix[r][c] > target) {c--;} else {r++;}}return false;}
}

看到这个算法,我就傻眼了。当时的想法是怎么可能用这么短的代码,完成?
后来仔细想了一下,作者的思路,真的太明确了。一行一行的排除。简单,高效。

总结:

算法重要的不是简单写出来,而是和高手去比较学习。算法重要的是,快,简单。

算法------------搜索二维矩阵相关推荐

  1. 算法---------搜索二维矩阵 II(Java 版)

    题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性:每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例:现有矩阵 matri ...

  2. python 搜索二维矩阵

    搜索二维矩阵 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入:m ...

  3. LeetCode 240. 搜索二维矩阵 II(二分查找 分治)

    文章目录 1. 题目 2. 解题 2.1 从左下角或者右上角开始搜索 2.2 分治算法 1. 题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以 ...

  4. LintCode 28. 搜索二维矩阵

    import org.junit.Test;import java.util.Arrays;public class SearchMatrix {/*** @param matrix: matrix, ...

  5. 利用可达矩阵判断连通性_leetcode240. 搜索二维矩阵 II

    leetcode240. 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上 ...

  6. Java 搜索二维矩阵 II

    搜索二维矩阵 II 中等 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target .该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示 ...

  7. LeetCode 07: T48. 旋转图像 (中等); T54. 螺旋矩阵(中等); T240. 搜索二维矩阵 II (中等)

    文章目录 T19: 48. 旋转图像 (中等) 思路 解法 1: 新增数组 解法 2: 原地旋转 T20: 54. 螺旋矩阵(中等) 思路 解法: 到边界换方向 T21: 240. 搜索二维矩阵 II ...

  8. LeetCode Algorithm 240. 搜索二维矩阵 II

    240. 搜索二维矩阵 II Ideas 这题我记得在左神算法初级班里面有. 主要的思想就是定义两个指针row_index和col_index,从右上角开始逐个搜索. 如果matrix[row_ind ...

  9. 【LeetCode】【HOT】240. 搜索二维矩阵 II(抽象二叉搜索树)

    [LeetCode][HOT]240. 搜索二维矩阵 II 文章目录 [LeetCode][HOT]240. 搜索二维矩阵 II package hot;public class Solution24 ...

最新文章

  1. 量化金融模型的基本Roadmap
  2. leetcode 115. Distinct Subsequences Hard | 115. 不同的子序列(动态规划)
  3. RT-Thread pin设备驱动代码结构剖析
  4. [Bugku][Web][CTF] 9-15 write up
  5. 橡胶柱压缩_你玩俄罗斯轮盘吗?剪切安全气囊压缩气瓶的隐患及注意事项
  6. easyUI自带的时间插件日期选择、月份选择、时间选择的使用(转)
  7. 一个老博士的经验顺口溜
  8. LINUX 添加xp虚拟机
  9. 交互式反汇编器专业版IDA Pro的一点介绍
  10. SAP ABAP开发视频学习(视频教程)
  11. 用几行代码写的bat小病毒
  12. 软件人员kpi制定模板_最常用5大绩效工具(附模板):OKR、KPI、MBO、平衡计分卡、360度...
  13. DeFi新玩法丨一文教你玩转NFT碎片化协议Fractional
  14. 1949年的国庆节(10月1日)是星期六.......
  15. 计算机网路——163邮箱授权码
  16. MATLAB 数学应用 微分方程 常微分方程 求解非刚性ODE
  17. 修改 ubnt 路由器固件
  18. 三星礼包 android,SAMSUNG 三星 Galaxy S8 智能手机 移动合约版(伪开箱)
  19. 分享一组制作游戏用的人物立绘/角色形象素材图片,共182张图片
  20. eclipse中使用git提交时忽略不必要的文件

热门文章

  1. php随机生成器加密,php生成随机密码的几种方法
  2. android 网络加载图片点击大图后 浏览 可 缩放,Android 网络加载图片点击大图后 浏览 可 缩放...
  3. oracle 度量 预警,度量阀值预警总结
  4. C++知识点13——友元,类的声明
  5. python三维图的坐标_六维图见过么?Python 画出来了
  6. Illustrator+FontLab 进行字体设计教程
  7. 9款Android经常使用的高速开发框架
  8. 一款基于jquery和css3的头像恶搞特效
  9. java_ant详解
  10. Flutter学习之”相对布局“