想不到为什么会TLE,我这么做难道不比遍历每个arr[i]要遍历次数少么,对于相同的数字我的下一次循环直接都跳过了
#include <iostream>//输入输出流
#include <algorithm>//排序等函数,find函数
#include <cmath>//数学函数
#include <string>//string
#include <cstring>//memset函数
#include <map>//map
#include <vector>//可变数组vector
#include <iomanip>//输出流格式化
#include <unordered_set>//有顺序的Set
#include <queue>//队列,优先队列
#include <climits>//最大值定义
#include <regex>//正则表达式
using namespace std;
long long ans=0;
long long arr[200005]={0};
//1 1 2 3
/*
10 3
10 4 7 5 10 4 5 8 5 7
4 1
1 1 2 3
10 1
1 1 1 2 2 3 4 4 5 5
*/
int main(){
long long N,C;
cin>>N>>C;
for(long long i=0;i<N;i++){
scanf("%lld",&arr[i]);
}
sort(arr,arr+N);
long long left=0,right=0,middle=0;
while(right<=N-1){
if(arr[left]==arr[right]){
right++;
}else{
middle=right;
while(arr[right]-arr[left]<C && right<N-1){
right++;
}
if(arr[right]-arr[left]==C){
long long index=right;
while(arr[right]==arr[index]){
ans=ans+middle-left;
right++;
}
}
left=middle;
right=left;
}
}
cout<<ans;
}