去一个值使差最小,实在不行了

显示超时怎么办

#include
using namespace std;
int arr[1000000];
int main(){
    int n; scanf("%d",&n);
    for(int i = 1; i <= n; i++) scanf("%d",&arr[i]);
    for(int i = 1; i < n ; i++){
        for(int j = 1; j < n - i + 1 ; j++){
            if(arr[j] > arr[j + 1]) swap(arr[j],arr[j + 1]);
        } 
    }
    int a = arr[n - 1] - arr[1];
    int b = arr[n] - arr[2];
    if(a > b) printf("%d",b);
    else printf("%d",a);
    return 0;
}

直接照着你的思路写的,优化了一下。直接用sort吧,挺香的

// Author:PanDaoxi
#include <bits/stdc++.h>
using namespace std;

const int INF = 1e6 + 1;
int n, x, y, a[INF];

int main(){
    ios :: sync_with_stdio(false);
    
    cin >> n;
    for(int i=1; i<=n; i++){
        cin >> a[i];
    }
    sort(a+1, a+n+1);
    x = a[n-1] - a[1],
    y = a[n] - a[2];
    cout << min(x, y);
    
    return 0;
}

你的时间复杂度是O(n^2),建议不要for循环嵌套,去看一下题目的单点测试时间,优化代码或者换个算法