求三个排序数组的交集


方法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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值