我需要检查一个数组是否是另一个更大数组的子数组。 (在句子(数组)中找到一个单词(子数组))。
我需要在递归算法中做到这一点。 运行时间将为log(n)。
数组:
char[] sentence = {'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'};
char[] word = {'l', 'l', 'o', 'w', 'o', 'r'};
char [] word = {'t', 'n' , 'p'};
我的代码:
static boolean wordFinder(char[] arr, char[] arr2, int l, int i) {
if (i == arr2.length - 1) {
return true;
}
if (arr[l] == arr2[i]) {
return wordFinder(arr, arr2, l + 1, i + 1);
}
if (l == arr.length - 1) {
return false;
}
return wordFinder(arr, arr2, l + 1, 0);
}
第三个数组仅用于检查代码。 (代码有效,只需要知道运行时间即可。)
答案 0 :(得分:0)
听起来您对测试代码块运行需要多长时间感兴趣。为此,只需记录前后的时间(以毫秒为单位),然后将两者相减即可。
long start_time = System.currentTimeMillis();
...
...
long end_time = System.currentTimeMillis();
System.out.println("Code completed in " + (end_time - start_time) + "milliseconds.");
还有System.nanoTime()
纳秒。
答案 1 :(得分:0)
程序的运行时复杂度为 O(n * m)。这里n是长度或arr
,而m
是arr2
的长度
为什么:,因为在每个递归中,每个递归实际上都有嵌套循环。对于arr
的每个元素,一个循环遍历arr2
,另一个循环是对arr
遍历。
嗯,最小复杂度为 O(n)。
更新:请查看以下链接:check-string-substring-another