鸠菜 2022-10-22 11:39 采纳率: 100%
浏览 19
已结题

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

显示超时怎么办

#include<bits/stdc++.h>
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;
}
  • 写回答

2条回答 默认 最新

  • 「已注销」 2022-10-22 13:04
    关注

    直接照着你的思路写的,优化了一下。直接用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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月5日
  • 已采纳回答 10月28日
  • 创建了问题 10月22日