Time complexity 当内部循环只运行一次时嵌套循环的时间复杂度?

Time complexity 当内部循环只运行一次时嵌套循环的时间复杂度?,time-complexity,nested-loops,Time Complexity,Nested Loops,我有以下代码,并试图找出其时间复杂性: int sum(int m, int n, int K) { int s = 0; for (int i = 0; i < n; i++) { s += i; if (i == K % 2) { for (int j = 0; j < m; j++) { s += j; } } } re

我有以下代码,并试图找出其时间复杂性:

int sum(int m, int n, int K) {
    int s = 0;
    for (int i = 0; i < n; i++) {
        s += i;
        if (i == K % 2) {
            for (int j = 0; j < m; j++) {
                s += j;
            }
        }
    }
    return s;
}
int和(int m,int n,int K){
int s=0;
对于(int i=0;i
根据代码,外循环在O(n)处运行,内循环在O(m)处运行。但是,内部循环只执行一次(当
i
等于
K%2
时)。我不确定它只运行一次时的时间复杂度是O(nm)还是O(n+m)。目前,我怀疑复杂性应该是O(n+m)。有人能给我解释一下这个例子吗?

它是O(m+n),因为内部循环只运行一次

通常将内部循环的O(m)复杂度乘以n的原因是,通常内部循环执行n次。我们应该将每个操作的复杂度乘以它完成的次数。在这种情况下,O(m)操作执行一次,因此应该乘以1,而不是n

更具体地说,赋值
s+=i
和比较
i==K%2
总共进行n次,赋值
s+=j总共执行了m次,因此总步骤数为O(m+n)。没有执行mn次或任意倍数的操作