求三个排序数组的交集


方法1:

void GetThreeArrayComm(int A[],int lenA,intB[], int lenB, int C[],int lenC)

{

    assert(A!= NULL&&B != NULL&&C != NULL&&lenA > 0&& lenB >0&&lenC > 0);

    

    int i=0;

    int j=0;

    int k=0;

    bool isLast=false;

    bool isFirst= false;

    bool isFind=false;

    int comm=0;

    

    while(i<lenA && j <lenB && k <lenC || !isLast)

    {

        if(A[i]<B[j])

        {

            i++;

        }

        elseif(A[i] > B[j])

        {

            j++;

        }

        elseif(A[i] == B[j] && !isFirst)

        {

            if(isLast)

            {

                break;

            }

            isFirst=true;

            comm= A[i];

            i++;

            if(i==lenA)

            {

                i--;

                isLast=true;

            }

            

            j++;

            

            if(j==lenB)

            {

                j--;

                isLast=true;

            }

            

        }

        elseif(comm > C[k])

        {

            k++;

        }

        elseif(comm < C[k])

        {

            isFirst=false;

        }

        else

        {

            isFind= ture;

            isFirst=false;

            k++;

            cout<<comm<<"\t";

        }

    }

    cout<<endl;

    if(!isFind)

    {

        cout<<"nocomm"<<endl;

    }

}



方法2:


bool GetThreeArrayComm_update(int A[],int lenA,int B[],int lenB,int C[],int lenC)
{
     assert(A!=NULL&&B!=NULL&&C!=NULL&&lenA>0&&lenB>0&&lenC>0);

     int i=0;
     int j=0;
     int k=0;
     bool isLast = false;
     bool found=false;

     while(i<lenA && j<lenB && k<lenC )
     {
          if (A[i]<B[j])  // 使用的是小于比较,避免了边界问题  
          {
               i++;
          }
          else //A[i] >= B[j]
          {
               if (B[j] < C[k])
               {
                    j++;
               }
               else  //B[j] >= C[k]
               {
                    if (C[k] < A[i])
                    {
                         k++;
                    }
                    else //C[k]>=A[i]>=B[j]>=C[k]
                    {
                         / / 找到一个
                         found = true;
                         cout<<A[i]<<"\t";
                         
                         i++;
                         j++;
                         k++;
                    }
               }
          }
     }
         
     cout<<endl;

     return found;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值