集合A-B–二分尋找

來源:互聯網
上載者:User

集合A-B的意思是,元素在A且不在B中。

這道題顯然不是什麼難題。個人水平有限,我喜歡分析這樣的水題,這對我個人來講,有助於培養思維能力,再難的題也是有簡單的題複合在一起組成的。

這題有兩種方法,一是直接枚舉,而是二分尋找。顯然枚舉只對小數有可以,時間複雜度為(n^2)而二分尋找先要排序,後尋找,時間複雜度為2nlogn,顯然我們會採用第二中方法。

輸入n,m代表集合A,B元素的個數,接下來是集合A的元素和集合B的元素。輸出A-B,若沒有元素,就輸出NULL。

如果是第一種:

代碼如下.0(n^2)

#include<stdio.h>int main(){   int i,t=0,a[1000],b[1000],n,m;    while(~scanf("%d%d",&n,&m))    {      for(i=0;i<n;i++)        scanf("%d",&a[i]);      for(i=0;i<m;i++)        scanf("%d",&b[i]);      for(i=0;i<n;i++)       for(int j=0;j<m;j++)       {        if(a[i]==b[j])          break;        if(a[i]!=b[j]&&j==m-1)          {           t++;           printf(t==1?"%d":" %d",a[i]);           }         }           if(!t) printf("NULL");           printf("\n");         t=0;       }      return 0;}

第二種方法:

代碼:o(2nlogn)

#include<cstdio>#include<algorithm>using namespace std;int a[1000],b[1000],m;int search(int p)  {     int i=0,j=m-1;     while(i<=j)      {        int mid=(i+j)/2;        if(b[mid]==p) return 0;        else if(p<b[mid]) j=mid-1;        else i=mid+1;        }      return 1;  }   int main(){      int i,j=0,n;    while(~scanf("%d%d",&n,&m))    {               for(i=0;i<n;i++)         scanf("%d",&a[i]);        for(i=0;i<m;i++)         scanf("%d",&b[i]);         sort(b,b+m);        for(i=0;i<n;i++)         if(search(a[i]))         {  j++;          printf(j==1?"%d":" %d",a[i]);          }          if(!j) printf("NULL");          printf("\n");          j=0;    }     return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.