c_cpp 找到具有给定差异的一对

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 找到具有给定差异的一对相关的知识,希望对你有一定的参考价值。

//https://www.geeksforgeeks.org/find-a-pair-with-the-given-difference/

#include<iostream>
using namespace std;

int merge(int a[],int l,int m,int r){
    int n1=m-l+1,n2=r-m;
    int b[n1],c[n2];
    for(int i=0;i<n1;i++)
        b[i]=a[l+i];
    for(int i=0;i<n2;i++)
        c[i]=a[i+m+1];

    int i=0,j=0,k=l;
    while(i<n1 && j<n2){
        if (b[i]<c[j])
            a[k++]=b[i++];
        else
            a[k++]=c[j++];
    }
    while(i<n1)
        a[k++]=b[i++];
    while(j<n2)
        a[k++]=c[j++];
}

int mergesort(int a[],int l,int r){
    if(l<r){
        int m=(l+r)/2;
        mergesort(a,l,m);
        mergesort(a,m+1,r);
        merge(a,l,m,r);
    }
}

int main(){
    int n,x;
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++)
        cin>>a[i];
    cout<< "Enter the difference:";
    cin>>x;

    mergesort(a,0,n-1);

    cout<<"Sorted array:\n";
    for(int i=0;i<n;i++)
        cout<<a[i]<< " ";
    cout<<"\n";


    int i=0,j=1,c=0;
    while(i<n && j<n){
        if(i!=j && a[j]-a[i]==x){
            c++;
            cout<< "Pair found ("<<a[i]<<", "<<a[j]<< ")";
            exit(0);
        }
        else if(a[j]-a[i]>x)
            i++;
        else
            j++;
    }
    if (c==0)
        cout<< "pair not found!";
}

以上是关于c_cpp 找到具有给定差异的一对的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 从两个排序的数组中找到最接近的一对

c_cpp 具有给定总和的对

c_cpp 检查/断言类是否具有给定签名的方法。

c_cpp 给定一个数组,打印具有递增顺序的元素的最大子数组

c_cpp 找到给定链表的中间位置

c_cpp 找到与给定值最近的k个元素