【leetcode刷题笔记】Search a 2D Matrix
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.
题解:每次用右上角的元素跟target比较,有三种情况:
- 相等,说明找到了target;
- 右上角元素比target元素大,那么说明target在第一行,递归的搜索第一行。
- 右上角元素比target元素小,那么说明target在第二行及以后,递归的搜索如下图所示区域:

代码如下:
public class Solution {
private boolean IfFind = false;
private void RightCornerRecur(int[][] matrix,int target,int m_start,int m_end,int n_start,int n_end){
if(m_start > m_end || n_start > n_end)
return;
if(m_start < 0 || n_start < 0 || m_end >= matrix.length || n_end >= matrix[0].length)
return;
if(matrix[m_start][n_end] == target){
IfFind = true;
return;
}
if(matrix[m_start][n_end] > target)
RightCornerRecur(matrix, target, m_start, m_start, n_start, n_end-1);
else {
RightCornerRecur(matrix, target, m_start+1,m_end, n_start, n_end);
}
}
public boolean searchMatrix(int[][] matrix, int target) {
RightCornerRecur(matrix, target,0,matrix.length-1, 0, matrix[0].length-1);
return IfFind;
}
}
右上角可以用来比较剪掉一些元素,左下角同样可以,下面的代码中加上了左下角元素与target元素的比较,最终的运行时间是384ms,而上述只考虑右上角的运行时间是472ms。
public class Solution {
private boolean IfFind = false;
private void RightCornerRecur(int[][] matrix,int target,int m_start,int m_end,int n_start,int n_end){
if(m_start > m_end || n_start > n_end)
return;
if(m_start < 0 || n_start < 0 || m_end >= matrix.length || n_end >= matrix[0].length)
return;
if(matrix[m_start][n_end] == target){
IfFind = true;
return;
}
if(matrix[m_start][n_end] > target)
RightCornerRecur(matrix, target, m_start, m_start, n_start, n_end-1);
else {
if(matrix[m_end][0] == target){
IfFind = true;
return;
}
if(matrix[m_end][0] < target)
RightCornerRecur(matrix, target, m_end, m_end, n_start+1, n_end);
else
RightCornerRecur(matrix, target, m_start+1,m_end-1, n_start, n_end);
}
}
public boolean searchMatrix(int[][] matrix, int target) {
RightCornerRecur(matrix, target,0,matrix.length-1, 0, matrix[0].length-1);
return IfFind;
}
}
【leetcode刷题笔记】Search a 2D Matrix的更多相关文章
- LeetCode刷题笔记和想法(C++)
主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p 高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己 ...
- Leetcode 74 and 240. Search a 2D matrix I and II
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...
- 18.9.10 LeetCode刷题笔记
本人算法还是比较菜的,因此大部分在刷基础题,高手勿喷 选择Python进行刷题,因为坑少,所以不太想用CPP: 1.买股票的最佳时期2 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. ...
- LeetCode刷题笔记 - 12. 整数转罗马数字
学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题. 官方链 ...
- 【leetcode刷题笔记】Rotate Image
You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...
- Leetcode刷题笔记(双指针)
1.何为双指针 双指针主要用来遍历数组,两个指针指向不同的元素,从而协同完成任务.我们也可以类比这个概念,推广到多个数组的多个指针. 若两个指针指向同一数组,遍历方向相同且不会相交,可以称之为滑动窗口 ...
- 【leetcode刷题笔记】Word Search
Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...
- 【leetcode刷题笔记】Spiral Matrix
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...
- 【leetcode刷题笔记】Unique Binary Search Trees
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
随机推荐
- Rancher探秘二:安装Rancher
环境准备 本次安装的是最新版本v2.1.5. 准备Linux环境,需要64位版本,在系统上安装docker,版本17.03.2 安装 docker安装, 登录到Linux服务器上,运行如下命令:sud ...
- 转载 --iOS QQ第三方登实现
我们经常会见到应用登陆的时候会有QQ,微信,微博等的第三方登陆 如图: 下面我们主要讲一下qq的第三方登陆如何实现 首先,到官网注册: http://wiki.connect.qq.com 一,下载S ...
- web安全之SQL注入---第三章 如何寻找sql注入?
借助逻辑推理1.识别web应用中所有输入点2.了解哪些类型的请求会触发异常3.检测服务器响应中的异常 总结: 输入点无非就是:地址栏.和输入框 输入康输入一些非法字符,导致后台的sql语句错误,
- centos7.0 安装php
1:去php官网下载对应版本的php包 2:解压php包 3:进入解压后的php包 ./configure --with-apxs2=/usr/local/apache2/bin/apxs --wit ...
- centos7.0 activemq的安装
1:下载地址http://activemq.apache.org/activemq-590-release.html 2:wget http://archive.apache.org/dist/act ...
- 九度OJ 1324:The Best Rank(最优排名) (排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:489 解决:126 题目描述: To evaluate the performance of our first year CS major ...
- vue v-on命令
<!-- 阻止单击事件冒泡 --> <a v-on:click.stop="doThis"></a> <!-- 提交事件不再重载页面 ...
- SNMP 监控方式的配置
由于某些设备并不能安装 Agent,或者不方便安装 Agent 等因素,将采用 SNMP 方式进行监控 1.Linux 配置 SNMP [root@crazy-acong ~]# yum -y ins ...
- ElasticSearch(三十)基于scoll+bulk+索引别名实现零停机重建索引
1.为什么要重建索引? 总结,一个type下的mapping中的filed不能被修改,所以如果需要修改,则需要重建索引 2.怎么zero time重建索引? 一个field的设置是不能被修改的,如果要 ...
- Android笔记之AsyncTask
AsyncTask中的4个回调 onPreExecute(),在doInBackground(Params...)之前运行在UI线程中 onPostExecute(Result),在doInBackg ...