当前位置: 首页 > 知识库问答 >
问题:

一个Leetcode问题“974.K可除子数组和”的时间复杂度分析

郏景澄
2023-03-14

我想出了一个解决这个问题的算法。然而,我不敢肯定这个解决方案的时间复杂性到底是什么。是O(n^3)还是O(n^2),我想知道给定函数subarraysdivbyk的时间复杂度是多少?请帮忙

{
    public int subarraysDivByK(int[] A, int K) 
    {
        int n = A.length;
        int count = 0;
        for(int i=0;i<n;i++)
        {
            for(int j=i;j<n;j++)
            {
                int sumWindow = findSum(A,i,j);
                if(sumWindow%K==0)
                {
                    count++;
                }
            }
        }
        return count;
    }
    
    public int findSum(int[] a, int start, int end)
    {
        int sum = 0;
        for(int i = start;i<=end;i++)
        {
            sum = sum + a[i];
        }
        return sum;
    }
}

共有1个答案

况唯
2023-03-14

对于i的某些值,您将尝试j的所有值,从in。对于每个J,您将计算J-I元素的总和。为此,您需要O(0+1+...+(n-i))=O((n-i)^2)操作。因此,对于i的所有可能值,您需要O(n^2+(n-1)^2+...+2^2+1^2)=O(n^3)操作。回答:O(N^3)。

 类似资料:
  • 输入: 简单地说,复杂度是不是3*(len(ab)+4*(len(c)),我说的对吗?

  • 我在leetcode上解决了这个问题,问题陈述如下。 移除无效括号的最小数目,以便使输入字符串有效。返回所有可能的结果。

  • 主要内容:时间复杂度,空间复杂度《 算法是什么》一节提到,解决一个问题的算法可能有多种,这种情况下,我们就必须对这些算法进行取舍,从中挑选出一个“最好”的。 算法本身是不分“好坏”的,所谓“最好”的算法,指的是最适合当前场景的算法。挑选算法时,主要考虑以下两方面因素: 执行效率:根据算法所编写的程序,执行时间越短,执行效率就越高; 占用的内存空间:不同算法编写出的程序,运行时占用的内存空间也不相同。如果实际场景中仅能使用少量的内

  • 下面给出了问题陈述和解决方案。我无法理解解决方案背后的逻辑。 问题陈述: 给定一个数组包含n+1个整数,其中每个整数介于1和n之间,证明至少存在一个重复的数字。假设只有一个重复的数字,找到重复的一个。 首先,搜索空间是1到n之间的数字。每次我选择一个数字mid(它是中间的那个),并计算所有等于或小于mid的数字。如果计数大于mid,则搜索空间为[1 mid],否则为[mid+1n]。我这样做,直到

  • 给定一个高度为h的二叉查找树(BST),它需要O(k h)时间来连续应用BST Inorder后续算法k次,从任何节点开始,在先前调用返回的节点上应用每个下一个调用。 伪代码: 我如何证明这种时间复杂性? 特别是,我试图建立k和访问的节点数之间的关系,但在这里找不到任何模式。

  • 我写了一个函数来寻找目标值在给定数组中应该插入的位置。我们假设数组有不同的值,并按升序排序。我的解必须是O(log N)时间复杂度 此代码的复杂性是否为O(log N)?