跳转至

时间复杂度

一般情况下,我们认为计算机的评测机一秒钟可以执行 \(2\times 10^8\) 次操作。

\(O(1)\)

参考实现
#include<bits/stdc++.h>
using namespace std;

int main(){
    long long n;
    cin>>n;
    cout<<n*(n+1)/2;
    return 0;
}
import java.util.*;

public class Main {

    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        long n=sc.nextLong();
        System.out.println(n*(n+1)/2);
    }

}
n=int(input())
print(n*(n+1)//2)

\(O(\log n)\)

参考实现
#include<bits/stdc++.h>
using namespace std;

int main(){
    long long n;
    cin>>n;

    long long x=1;
    int cnt=0;

    while(x<n){
        x*=2;
        cnt++;
    }

    cout<<cnt;
    return 0;
}
import java.util.*;

public class Main {

    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);

        long n=sc.nextLong();
        long x=1;
        int cnt=0;

        while(x<n){
            x*=2;
            cnt++;
        }

        System.out.println(cnt);
    }

}
n=int(input())

x=1
cnt=0

while x<n:
    x*=2
    cnt+=1

print(cnt)

\(O(\sqrt{n})\)

参考实现
#include<bits/stdc++.h>
using namespace std;

bool isprime(int n){
    if(n<=1) return false;
    for(int i=2;i*i<=n;i++){
        if(n%i==0) return false;
    }
    return true;
}

int main(){
    int n;
    cin>>n;
    if(isprime(n)) cout<<"YES";
    else cout<<"NO";
    return 0;
}
import java.util.*;

public class Main {

    static boolean isprime(int n){
        if(n<=1) return false;
        for(int i=2;i*i<=n;i++){
            if(n%i==0) return false;
        }
        return true;
    }

    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        if(isprime(n)) System.out.println("YES");
        else System.out.println("NO");
    }

}
def isprime(n):
    if n<=1:
        return False
    i=2
    while i*i<=n:
        if n%i==0:
            return False
        i+=1
    return True

n=int(input())
if isprime(n):
    print("YES")
else:
    print("NO")

\(O(n)\)

参考实现
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N];

int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    long long sum=0,ans=LLONG_MIN;
    for(int i=1;i<=n;i++){
        sum+=a[i];
        ans=max(ans,sum);
    }
    cout<<ans;
    return 0;
}
import java.util.*;

public class Main {

    static final int N=100010;
    static int[] a=new int[N];

    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        for(int i=1;i<=n;i++) a[i]=sc.nextInt();
        long sum=0,ans=Long.MIN_VALUE;
        for(int i=1;i<=n;i++){
            sum+=a[i];
            ans=Math.max(ans,sum);
        }
        System.out.println(ans);
    }

}
import sys
input=sys.stdin.readline

n=int(input())
a=list(map(int,input().split()))

s=0
ans=-10**18
for x in a:
    s+=x
    ans=max(ans,s)

print(ans)

\(O(n\log n)\)

参考实现
#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;

    vector<int> a(n);
    for(int i=0;i<n;i++) cin>>a[i];

    sort(a.begin(),a.end());

    for(int x:a) cout<<x<<" ";
    return 0;
}
import java.util.*;

public class Main {

    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();

        int[] a=new int[n];
        for(int i=0;i<n;i++) a[i]=sc.nextInt();

        Arrays.sort(a);

        for(int x:a) System.out.print(x+" ");
    }

}
n=int(input())
a=list(map(int,input().split()))

a.sort()

print(*a)

\(O(n^2)\)

参考实现
#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;

    int cnt=0;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cnt++;
        }
    }

    cout<<cnt;
    return 0;
}
import java.util.*;

public class Main {

    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();

        int cnt=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                cnt++;
            }
        }

        System.out.println(cnt);
    }

}
n=int(input())

cnt=0
for i in range(n):
    for j in range(n):
        cnt+=1

print(cnt)

\(O(2^n)\)

参考实现
#include <bits/stdc++.h>
using namespace std;

int n, a[20], ans;

void dfs(int i, int sum){
    if(i==n){
        ans=max(ans,sum);
        return;
    }
    dfs(i+1,sum);      // 不选第 i 个
    dfs(i+1,sum+a[i]); // 选第 i 个
}

int main(){
    cin >> n;
    for(int i=0;i<n;i++) cin >> a[i];
    dfs(0,0);
    cout << ans << "\n";
    return 0;
}
import java.util.*;

public class Main {
    static int n;
    static int[] a = new int[20];
    static int ans = 0;

    static void dfs(int i, int sum){
        if(i==n){
            ans = Math.max(ans,sum);
            return;
        }
        dfs(i+1,sum);       // 不选第 i 个
        dfs(i+1,sum+a[i]);  // 选第 i 个
    }

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        for(int i=0;i<n;i++) a[i] = sc.nextInt();
        dfs(0,0);
        System.out.println(ans);
    }
}
n = int(input())
a = list(map(int,input().split()))
ans = 0

def dfs(i,sum):
    global ans
    if i==n:
        ans = max(ans,sum)
        return
    dfs(i+1,sum)       # 不选第 i 个
    dfs(i+1,sum+a[i])  # 选第 i 个

dfs(0,0)
print(ans)