LeetCode Search a 2D Matrix
2015-12-26 13:31
344 查看
题目:
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:
Given target =
题意:
给定一个m * n的矩阵,然后给定一个需要判断是否在这个矩阵中的值,其中这个矩阵有如下特点,每一行都是已经排好序的,并且每一行的第一个元素都比下一行的第一个元素要小,判断给定的这个值是否在这个矩阵中。
我的思路是这样的,首先是按行找,找到需要找的那个值在一行,其中这里需要考虑好几种情况,首先是如果这个矩阵只有一行,并且这个值比第一行的第一个元素都要小,那么就直接返回false;如果这个值找到的行在最后一行,那么直接就返回这一行的行号即可。找到具体在哪一行之后,就可以调用二分搜索来查找具体这个值是否存在。
代码:
<span style="font-size:14px;">public class Solution
{
public boolean searchMatrix(int[][] matrix,int target)
{
int rowlength = matrix.length;
System.out.println(rowlength);
int collength = matrix[0].length;
int flag = -1;
for(int i = 0; i < rowlength; i++)
{
if(matrix[i][0] == target)
return true;
if(matrix[i][0] > target && i == 0)
return false;
if(i < rowlength - 1 && matrix[i][0] < target && matrix[i + 1][0] > target)
{
flag = i;
break;
}
if(matrix[i][0] <target && i == rowlength - 1)
{
flag = i;
break;
}
}
System.out.println(flag);
if(flag != -1)
{
return binarySearch(matrix[flag],0,collength - 1,target);
}
return false;
}
public boolean binarySearch(int[] nums,int start,int end,int target)
{
if(start <= end)
{
int middle = (start + end) / 2;
int middleValue = nums[middle];
if(target == middleValue)
return true;
else if(target < middleValue)
return binarySearch(nums,start,middle - 1,target);
else if(target > middleValue)
return binarySearch(nums,middle + 1,end,target);
}
return false;
}
}</span>
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.
题意:
给定一个m * n的矩阵,然后给定一个需要判断是否在这个矩阵中的值,其中这个矩阵有如下特点,每一行都是已经排好序的,并且每一行的第一个元素都比下一行的第一个元素要小,判断给定的这个值是否在这个矩阵中。
我的思路是这样的,首先是按行找,找到需要找的那个值在一行,其中这里需要考虑好几种情况,首先是如果这个矩阵只有一行,并且这个值比第一行的第一个元素都要小,那么就直接返回false;如果这个值找到的行在最后一行,那么直接就返回这一行的行号即可。找到具体在哪一行之后,就可以调用二分搜索来查找具体这个值是否存在。
代码:
<span style="font-size:14px;">public class Solution
{
public boolean searchMatrix(int[][] matrix,int target)
{
int rowlength = matrix.length;
System.out.println(rowlength);
int collength = matrix[0].length;
int flag = -1;
for(int i = 0; i < rowlength; i++)
{
if(matrix[i][0] == target)
return true;
if(matrix[i][0] > target && i == 0)
return false;
if(i < rowlength - 1 && matrix[i][0] < target && matrix[i + 1][0] > target)
{
flag = i;
break;
}
if(matrix[i][0] <target && i == rowlength - 1)
{
flag = i;
break;
}
}
System.out.println(flag);
if(flag != -1)
{
return binarySearch(matrix[flag],0,collength - 1,target);
}
return false;
}
public boolean binarySearch(int[] nums,int start,int end,int target)
{
if(start <= end)
{
int middle = (start + end) / 2;
int middleValue = nums[middle];
if(target == middleValue)
return true;
else if(target < middleValue)
return binarySearch(nums,start,middle - 1,target);
else if(target > middleValue)
return binarySearch(nums,middle + 1,end,target);
}
return false;
}
}</span>
相关文章推荐
- 2015 中国大数据技术大会 PPT 尝鲜
- Linux命令学习总结:dos2unix - unix2dos
- 初识socket
- zw.delphi不同版本程序运行速度测试
- 麦克风阵列原理
- 二叉树的建立与遍历
- hdu1072 Nightmare--DFS/BFS
- 期末总结
- python 程序构架
- 判断101-200之间有多少个素数,并输出所有素数。
- 文本挖掘详解
- 查找算法
- ScrollView的使用
- 用Python脚本做一些网页游戏中力所能及的自动化任务
- 马哥linux学习笔记:centos7中的yum详解
- 防尘和防水等级
- C语言学习笔记----伊能C语言学习笔记----变量可以在程序的三个地方声明
- LWIP 移植文件内容
- 使用Python实现Hadoop MapReduce程序
- Floyd算法(多源最短路算法)