第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

c++如何刪除一個(gè)數(shù)組中的重復(fù)元素?

c++如何刪除一個(gè)數(shù)組中的重復(fù)元素?

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

3 回答

?
MM們

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊

可以使用雙重循環(huán),逐一對(duì)比元素,如有重復(fù),則刪除的方法去重。

其思路為

1、依次遍歷循環(huán)中的每一個(gè)元素。

2、對(duì)于任意一個(gè)元素,依次與之前的元素進(jìn)行對(duì)比,如果有重復(fù)則刪除。

3、刪除操作可以采用將后續(xù)元素逐個(gè)前移,達(dá)到覆蓋當(dāng)前元素的效果。


在此基礎(chǔ)上可以進(jìn)行一點(diǎn)優(yōu)化,即,不需要每次刪除元素均前移所有元素,而是把需要保留的元素放到"應(yīng)該"放的位置即可,這樣可以提高效率。

以整型數(shù)組為例,參考代碼如下:

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


查看完整回答
反對(duì) 回復(fù) 2019-04-11
?
有只小跳蛙

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊

如果是使用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());    // 上面一段是為了生成測試數(shù)據(jù)    // vector<int>::iterator 這個(gè)是定義了個(gè)迭代器    vector<int>::iterator it;     // 輸出去重之前的元素    for (it = buf.begin(); it != buf.end(); it++)        cout << *it << " ";    cout << endl;         // 先對(duì)數(shù)據(jù)進(jìn)行排序(必須的)    sort(buf.begin(), buf.end());    // unique()函數(shù)就是去重用的    // 去重原理:找到重復(fù)的數(shù)據(jù)后移動(dòng)到最后,然后返回第一個(gè)重復(fù)的元素的地址    it = unique(buf.begin(), buf.end());    // 刪掉重復(fù)的元素    buf.erase(it, buf.end());         // 輸出去重后的元素    for (it = buf.begin(); it != buf.end(); it++)        cout << *it << " ";    cout << endl;}// 以上就是利用STL的方法


如果不是使用STL的話,只是對(duì)某個(gè)數(shù)組進(jìn)行去重的話,可以參考這個(gè)過程:

1、進(jìn)行排序(依然可以調(diào)用sort())

2、對(duì)比相鄰兩個(gè)元素,相同就刪掉一個(gè)



查看完整回答
反對(duì) 回復(fù) 2019-04-11
?
aluckdog

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊

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

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

查看完整回答
反對(duì) 回復(fù) 2019-04-11
  • 3 回答
  • 0 關(guān)注
  • 4579 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)