亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c++如何刪除一個數組中的重復元素?

c++如何刪除一個數組中的重復元素?

幕布斯7119047 2019-04-03 07:03:41
c++如何刪除一個數組中的重復元素
查看完整描述

3 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

可以使用雙重循環,逐一對比元素,如有重復,則刪除的方法去重。

其思路為

1、依次遍歷循環中的每一個元素。

2、對于任意一個元素,依次與之前的元素進行對比,如果有重復則刪除。

3、刪除操作可以采用將后續元素逐個前移,達到覆蓋當前元素的效果。


在此基礎上可以進行一點優化,即,不需要每次刪除元素均前移所有元素,而是把需要保留的元素放到"應該"放的位置即可,這樣可以提高效率。

以整型數組為例,參考代碼如下:

1234567891011121314int remove_repeat(int *a, int l)//對起始地址為a,長度為l的數組進行去重,新的長度以返回值形式返回。{    int i,j, r=0; //i,j為循環下標,r為去重后元素總數,初始值為0         for(i = 0; i < l; i ++)    {        for(j = 0; j < r; j ++)//檢查是否重復            if(a[j] == a[i]) break;        if(j == r) //沒有重復元素            a[r++] = a[i]; //將當前元素放置與去重后數組的尾部,并增加去重后的總數。    }         return r; //返回新的長度。}


查看完整回答
反對 回復 2019-04-11
?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

如果是使用STL的話,可以參考如下代碼:

123456789101112131415161718192021222324252627282930313233#include <vector>#include <iostream>#include <algorithm>using namespace std; int main(){    vector<int> buf(5, 2);    for (int i = 0; i < 5; i++)        buf.push_back(rand());    // 上面一段是為了生成測試數據    // vector<int>::iterator 這個是定義了個迭代器    vector<int>::iterator it;     // 輸出去重之前的元素    for (it = buf.begin(); it != buf.end(); it++)        cout << *it << " ";    cout << endl;         // 先對數據進行排序(必須的)    sort(buf.begin(), buf.end());    // unique()函數就是去重用的    // 去重原理:找到重復的數據后移動到最后,然后返回第一個重復的元素的地址    it = unique(buf.begin(), buf.end());    // 刪掉重復的元素    buf.erase(it, buf.end());         // 輸出去重后的元素    for (it = buf.begin(); it != buf.end(); it++)        cout << *it << " ";    cout << endl;}// 以上就是利用STL的方法


如果不是使用STL的話,只是對某個數組進行去重的話,可以參考這個過程:

1、進行排序(依然可以調用sort())

2、對比相鄰兩個元素,相同就刪掉一個



查看完整回答
反對 回復 2019-04-11
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

可以使用雙重循環,逐一對比元素,如有重復,則刪除的方法去重。
其思路為
1、依次遍歷循環中的每一個元素。
2、對于任意一個元素,依次與之前的元素進行對比,如果有重復則刪除。
3、刪除操作可以采用將后續元素逐個前移,達到覆蓋當前元素的效果。
在此基礎上可以進行一點優化,即,不需要每次刪除元素均前移所有元素,而是把需要保留的元素放到"應該"放的位置即可,這樣可以提高效率。
以整型數組為例,參考代碼如下:

1234567891011121314
int remove_repeat(int *a, int l)//對起始地址為a,長度為l的數組進行去重,新的長度以返回值形式返回。{ int i,j, r=0; //i,j為循環下標,r為去重后元素總數,初始值為0 for(i = 0; i < l; i ++) { for(j = 0; j < r; j ++)//檢查是否重復 if(a[j] == a[i]) break; if(j == r) //沒有重復元素 a[r++] = a[i]; //將當前元素放置與去重后數組的尾部,并增加去重后的總數。 } return r; //返回新的長度。}

查看完整回答
反對 回復 2019-04-11
  • 3 回答
  • 0 關注
  • 4547 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號