3 回答

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ù)組為例,參考代碼如下:
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; //返回新的長度。 } |

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è)

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; //返回新的長度。}
- 3 回答
- 0 關(guān)注
- 4579 瀏覽
添加回答
舉報(bào)