c++數組操作(重複,排序,bitset)

來源:互聯網
上載者:User

標籤:

//問題:  //給你一個數組,a[]={1,1,1,1,1,2,2,2,2,3,3,3,4,5,6}  //要輸出的結果是1,2,3,4,5,6.(去除重複的數字,要求時間空間的考慮).
#include <iostream>using namespace std;template<int _N>class Bitset{public:Bitset(){_Tidy();//調用_Tidy()函數會初始化所有位為0.}void Show()//顯示01位.{for(int _I=0;_I<_N;_I++){cout<<(test(_I)?'1':'0');}}bool test(int _P)//測試該位置是否為真(1).{int _I = _P/32;return (A[_I]>>(_P%32))&0x1;}void _Tidy(){for(int _I=0;_I<_W;_I++){A[_I] = 0;}}void set(int _P)//將_p下標設定為1.{int _I = _P/32;A[_I] |= (0x1<<(_P%32));}void printf(){for(int _I=0;_I<_N;_I++){test(_I) && (cout<<_I<<"  ");}}//列印排列結果.private:typedef long LONG;//以long的4個位元組為一個單位元組.enum{_Nw=(_N-1)/(sizeof(LONG)*8),_W=_Nw+1};int A[_W];};int main(){Bitset<600> a;int b[]={1,1,1,1,2,2,3,3,34,2,423,42,34,23,1,1,3,213,123,21,3,3,4,32,543,5,46,3,45,35,23,42,3};for(int i=0;i<33;i++){a.set(b[i]);}a.printf();}

下面有兩種粗暴的方法。

#include <iostream>  using namespace std;    struct Node  {      int data;      Node *next;      Node():data(-1),next(NULL){}  };  //時間複雜度大幅度減少,但是增加了一定的空間複雜度。  class Hash  {      public:      Hash(int a[],int n)      {          NodeTable = new Node[7];          for(int i=0;i<n;i++)          {              int index = HashIndex(a[i]);//尋找a[i]的下標,並且在hash表尋找該值是否存在,不存在我們則以鏈表形式插入。              NodeTable[index].data=1;//初始化為-1,表示在該下標下面沒有數值,如果出現index等於該下標則將該下標標記為1,表示有東西存著呢!              Node* p = NodeTable[index].next;                            while(p!=NULL && p->data!=a[i])              {                  p=p->next;              }              if(p==NULL)              {                  Node *s = new Node();                  s->data = a[i];                  NodeTable[index].next=s;              }          }      }      void Show()      {          for(int i=0;i<7;i++)          {              if(NodeTable[i].data!=-1)              {               Node *p = NodeTable[i].next;                  while(p!=NULL)                  {                      cout<<" "<<p->data<<" ";                      p = p->next;                  }              }             }          cout<<endl;      }      int HashIndex(int x)      {          return x%7;      }      private:      Node *NodeTable;  };  int main()  {      int a[]={1,2,2,1,1,1,3,4,5};      Hash sh(a,9);      sh.Show();      return 0;  }        --------------------------------------------------------------  #include <iostream>  #include <stdlib.h>  using namespace std;  //粗暴的刪減法,時間複雜度稍微高了一些,空間複雜度比較低。  void Grial(int a[],int& n)//這裡的n用引用傳入,因為數組大小會在我刪減重複數值時動態改變,引用傳入,我就不需要記錄n的實際值了。  {      int i=0;      int j;      int k;      for(;i<n;)      {          for(j=i+1;j<=n;j++)          {              if(a[i]==a[j])                  {                      for(k=j;k<n;k++)                      {                       a[k]=a[k+1];//刪除與a[i]重複的值,並且將n減1;                      }                      n--;                  }                  if(j>=n)                  {                      i++;                  }          }          if(a[i]==a[i+1])          {              for(k=i;k<n;k++)                  {                      a[k]=a[k+1];                  }              n--;          }      }     }  int main()  {      int a[100];      for(int i=0;i<100;i++)      {          a[i]=rand()%100;      }      int b=99;      Grial(a,b);      for(int i=0;i<b;i++)      {          cout<<a[i]<<endl;      }         return 0;  }  


c++數組操作(重複,排序,bitset)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.