问题标题: 酷町堂:5168怎样改才不会超时?

0
0
已解决
王子豪
王子豪
资深守护
资深守护
#include <iostream>
#include <algorithm>
using namespace std;
int n,d,a[1200000];
int t,cnt,s=0x3f3f3f3f;
int main() {
    cin>>n>>d;
    for(int i=1;i<=n;i++)
    cin>>a[i];
    for(int i=1;i<=n;i++){
        t=a[i]+d;
        for(int j=1;j<=n;j++){
            if(a[j]<a[i]||a[j]>a[i]+d) cnt++;
        }
        s=min(s,cnt);
        cnt=0;
    }
    cout<<s;
    return 0;
}

 


0
已采纳
李鑫羽
李鑫羽
初级光能
初级光能

已经AC了,结贴不;

0
0
王子豪
王子豪
资深守护
资深守护
#include<iostream>
#include<algorithm>
using namespace std;
int n,k,a[200001],minn=200001;
int main(){
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+n+1);
    int j=1;
    for(int i=1;i<=n;i++){
        while(j<=n&&a[j]-a[i]<=k){
            j++;
            minn=min(minn,n-(j-i));
        }
    }
    cout<<minn;
    return 0;
}

 

0
0
黄依成
黄依成
中级天翼
中级天翼

双重for超时,大于O(10^8)了

可以for里嵌while

0
李瑞曦
李瑞曦
高级天翼
高级天翼

把while里的minn=min(minn,n-(j-i))放到while下面就行了

0
0
武宸锐
武宸锐
初级光能
初级光能
sort(a+1,a+n+1);
    int j=1;
    for(int i=1;i<=n;i++){
        while(j<=n&&a[j]-a[i]<=k){
            j++;
            minn=min(minn,n-(j-i));
        }
    }

 

0
武宸锐
武宸锐
初级光能
初级光能
while(j<=n&&a[j]-a[i]<=d){
            j++;
        }
        minn=min(minn,n-(j-i));

 

我要回答