下一个更大元素的时间复杂度

时间:2018-06-28 04:11:38

标签: java performance big-o

我已参考GeeksforGeeks的this问题解决了Next Greater Element问题。我很困惑地发现以下问题的时间复杂度(Big O)。 如果有人可以帮助我,这将真的很有帮助。

问题: 给定一个数组,为每个元素打印下一更大元素(NGE)。元素x的下一个更大元素是数组x中右侧第一个更大的元素。对于没有更大元素的元素,请将下一个更大元素视为-1。

示例:

a)对于任何数组,最右边的元素总是下一个更大的元素为-1。

b)对于以降序排列的数组,所有元素的下一个更大元素为-1。

    如何找到它的时间复杂度?

  1. 这是解决此问题的可接受方法吗?

        int[] array = {20,10,5,3};
    
        int len =array.length;
        int[] temp = new int[len];
    
        int j=0;
        int i=j;
        while(j<len-1){
            ++i;
            if(i>=len){
                System.out.println(array[j]+"----> -1");
                j++; i=j;
                continue;
            }
            if(array[j]<array[i]){
                System.out.println(array[j]+"----> "+array[i]);
                j++; i=j;
            }
        }
        System.out.println(array[j]+"----> -1");
    

1 个答案:

答案 0 :(得分:1)

由于使用var str='Aug 19th 2018'.replace(/(\w{3})\s(\d{1,})\w{2}\s(\d{4})/,function(match,m,d,y){ return ({'Jan':'01','Feb':'02','Mar':'03','Apr':'04','May':'05','Jun':'06','Jul':'07','Aug':'08','Sep':'09','Oct':'10','Nov':'11','Dec':'12'})[m]+'-'+d+'/'+y; }); console.log(str);,因此难以确定算法的复杂性,这给推理增加了不必要的困难。

重写为以下内容(不使用continuebreak):

continue

现在很明显这是public void test() { int[] array = {10, 20, 3, 5}; int len = array.length; for (int j = 0; j < len - 1; j++) { int nge = -1; for (int i = j + 1; i < len && nge < 0; i++) { if (array[j] < array[i]) { nge = array[i]; } } System.out.println(array[j] + "----> " + nge); } System.out.println(array[len-1] + "----> -1"); } ,因为外部循环迭代到O(n lg n),内部循环迭代到n