百度题 算法(一)解决办法
百度题 算法(一)
给定如下的n*n的数字矩阵,每行从左到右是递增, 每列的数据也是递增
1 2 3
3 5 6
4 8 9
现在要求设计一个算法, 给定一个数k 判断出k是否在这个矩阵中。 描述算法并且给出时间复杂度(不考虑载入矩阵的消耗)
个人思路:想现在对角线上查找,不符合在查找行和列
我的方法如下,但是运行会一直显示false,大神们可否修改下:
public static boolean f(int[][] matrix,int i,int j,int x){ //i表示行,j表示列,x表示的题目中的数k
if(i==-1||j==-1)
return false;
else
{
if(matrix[i][j]==x)
{
return true;
}
else if(matrix[i][j]>x)
{
return f(matrix,i+1,j+1,x);
}
else
{
return f(matrix,i-1,j,x)||f(matrix,i,j-1,x);
}
}
}
ps:也可以贴出自己的程序,供大家分享
------解决方案--------------------
else if(matrix[i][j]<x)
{
return f(matrix,i+1,j+1,x);
}
改成小于就好使了,我明白你的意思,只是代码写错了一个符号
------解决方案--------------------
lz看看杨氏矩阵的查找吧,复杂度是O(n)的。
给定如下的n*n的数字矩阵,每行从左到右是递增, 每列的数据也是递增
1 2 3
3 5 6
4 8 9
现在要求设计一个算法, 给定一个数k 判断出k是否在这个矩阵中。 描述算法并且给出时间复杂度(不考虑载入矩阵的消耗)
个人思路:想现在对角线上查找,不符合在查找行和列
我的方法如下,但是运行会一直显示false,大神们可否修改下:
public static boolean f(int[][] matrix,int i,int j,int x){ //i表示行,j表示列,x表示的题目中的数k
if(i==-1||j==-1)
return false;
else
{
if(matrix[i][j]==x)
{
return true;
}
else if(matrix[i][j]>x)
{
return f(matrix,i+1,j+1,x);
}
else
{
return f(matrix,i-1,j,x)||f(matrix,i,j-1,x);
}
}
}
ps:也可以贴出自己的程序,供大家分享
------解决方案--------------------
else if(matrix[i][j]<x)
{
return f(matrix,i+1,j+1,x);
}
改成小于就好使了,我明白你的意思,只是代码写错了一个符号
------解决方案--------------------
lz看看杨氏矩阵的查找吧,复杂度是O(n)的。