【发布时间】:2018-11-11 22:00:35
【问题描述】:
我需要编写一个方法,它采用二维数组'int [][] m'和一个值'val'并检查val是否在数组中复杂度为O(n),而n定义为行数和 m 必须是平方的
可以用作我的方法的参数的数组必须为此方法返回true:
(如果返回 true 则数组符合要求)
public static boolean test(int[][] m) {
int n = m.length;
for (int r = 0; r < (n - 1); r++)
for (int c = 0; c < n; c++)
for (int i = 0; i < n; i++)
if (m[r][c] > m[r + 1][i]) return false;
return true;
}
此数组返回 TRUE:
int [][] arr3 = new int [][]{
{ 0, 2, 1, 2, 0, 5, 5, 5, },
{ 21, 21, 7, 7, 7, 21, 21, 21 ,},
{ 21, 21, 21, 21, 21, 21, 21 , 21, },
{ 21, 21, 23 , 42, 41, 23, 21, 21, },
{ 60 ,56, 57, 58, 53, 52, 47, 51 ,},
{ 61, 65, 70 , 72, 73, 78, 82, 98 ,},
{ 112, 121, 112, 134, 123, 100, 98, 111,},
{ 136, 136, 136, 134, 147, 150, 154, 134,},
};
如果val 在数组中并且看起来像这样,我的方法应该返回true:
public boolean findValTest(int [][] m, int val){...}
【问题讨论】:
-
n是如何定义的? -
哦,抱歉,添加了 :) @Turing85
-
... 和 O(n) 应该是最坏情况下的执行时间?如果是这样,我感觉这是不可能的。
-
你的
val在哪里? -
乍一看,每一列都是排序的,所以每列可以得到 O(log n),然后将其乘以列数得到 O(n log n)。但就获得 O(n) 而言?我有兴趣阅读其他人的想法
标签: java arrays search time-complexity