如何检查Java程序的运行时间?

时间:2019-06-11 10:14:36

标签: java arrays recursion runtime

我需要检查一个数组是否是另一个更大数组的子数组。 (在句子(数组)中找到一个单词(子数组))。

我需要在递归算法中做到这一点。 运行时间将为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);


}

第三个数组仅用于检查代码。 (代码有效,只需要知道运行时间即可。)

2 个答案:

答案 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,而marr2的长度 为什么:,因为在每个递归中,每个递归实际上都有嵌套循环。对于arr的每个元素,一个循环遍历arr2,另一个循环是对arr遍历。

嗯,最小复杂度为 O(n)

更新:请查看以下链接:check-string-substring-another