LintCode 38. Search a 2D Matrix II
2016-01-16 13:58
543 查看
Write an efficient algorithm that searches for a value in an m x n matrix, return the occurrence of it.
This matrix has the following properties:
Integers in each row are sorted from left to right.
Integers in each column are sorted from up to bottom.
No duplicate integers in each row or column.
Have you met this question in a real interview?
Yes
Example
Consider the following matrix:
Given target =
Challenge
O(m+n) time and O(1) extra space
解题思路:
从左下角往右上角找,若是小于target就往右找,若是大于target就往上找。时间复杂度O(m+n) n 为行数,m为列数。
定义count 计数。
与 Leetcode 240. Search a 2D Matrix II 类似。
Java code:
Reference:
1. http://www.jiuzhang.com/solutions/search-a-2d-matrix-ii/
This matrix has the following properties:
Integers in each row are sorted from left to right.
Integers in each column are sorted from up to bottom.
No duplicate integers in each row or column.
Have you met this question in a real interview?
Yes
Example
Consider the following matrix:
[ [1, 3, 5, 7], [2, 4, 7, 8], [3, 5, 9, 10] ]
Given target =
3, return
2.
Challenge
O(m+n) time and O(1) extra space
解题思路:
从左下角往右上角找,若是小于target就往右找,若是大于target就往上找。时间复杂度O(m+n) n 为行数,m为列数。
定义count 计数。
与 Leetcode 240. Search a 2D Matrix II 类似。
Java code:
public class Solution { /** * @param matrix: A list of lists of integers * @param: A number you want to search in the matrix * @return: An integer indicate the occurrence of target in the given matrix */ public int searchMatrix(int[][] matrix, int target) { //check corner case if (matrix == null || matrix.length == 0) { return 0; } if (matrix[0] == null || matrix[0].length == 0) { return 0; } //find from bottom left to top right int n = matrix.length; //row int m = matrix[0].length; //column int x = n - 1; int y = 0; int count = 0; while (x >= 0 && y < m) { if (matrix[x][y] < target) { y++; } else if (matrix[x][y] > target) { x--; } else { count++; x--; y++; } } return count; } }
Reference:
1. http://www.jiuzhang.com/solutions/search-a-2d-matrix-ii/
相关文章推荐
- 将EditText的光标定位到字符的最后面
- 使用GENIL模型开发报表
- Dynamic Programming--Longest Common Subsequence
- Function Set in OPEN CASCADE
- WPF中给datagrid控件中dataTable添加新行,并选中设为当前行(源码加注释)
- C++中的结构体
- 常用的代码收集,没有任何技术含量,只是填坑的积累
- JAVA加密解密之Base64
- Apply Newton Method to Find Extrema in OPEN CASCADE
- Android 找出微信聊天记录的缓存
- Java的IO流与对象的序列化浅谈
- 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序
- 常用测试网络方法
- 使用maven构建XML风格的Spring4 MVC应用
- 对activity的一些理解和用法的记录
- PHP开发入门-环境搭建
- iOS 截屏并保存到相册
- Win10加快搜索
- OPEN CASCADE Multiple Variable Function
- javac编译后出现乱码错误