導航:首頁 > 源碼編譯 > 刪除重復元素演算法

刪除重復元素演算法

發布時間:2022-07-24 05:42:57

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

方法一、

vector<int> sun;

//向sun添加元素

for (int i = 0; i < n; ++i)

{

sun.push_back(primes[i]);

}

sort(sun.begin(), sun.end());

//使用 erase 刪除

sun.erase(unique(sun.begin(), sun.end()), sun.end());

earse的功能是刪除指定范圍內的所有函數;unique將相鄰的重復的元素移到最後。

方法二、

排序函數(sort)和去重函數都在<algorithm>頭文件中。

#include <iostream>

#include <algorithm>

#include <vector>

using namespace std;

int main() {

vector<int> v;

cout << "Number of vector's element : " << endl;

int number;

cin >> number;

for (int i = 0; i < number; i++) {

int temp;

cin >> temp;

v.push_back(temp);

}

sort(v.begin(),v.end());

v.erase(unique(v.begin(), v.end()), v.end());

for (int i = 0; i < v.size(); i++) {

cout << v[i] << " ";

}

cout << endl;

return 0;

}

unique()函數將重復的元素放到vector的尾部然後返回指向第一個重復元素的迭代器再用erase函數擦除從這個元素到最後元素的所有的元素.


(1)刪除重復元素演算法擴展閱讀:

return的用法:

return的作用是結束正在運行的函數,並返回函數值。return後面可以跟一個常量,變數,或是表達式。

1、函數的定義一般是這樣的,例如:

inta(inti)第一個int是函數的返回值的類型,也就是return後面跟的值的類型,a是函數的名稱,括弧里的是傳遞給函數的參數,int是參數的類型,i是參數的名字

.../省略函數體內容

returnb;//b必須與函數頭的返回值一致(此處為int型)

2、簡單函數舉例:

intaddOne(intb)

returnb+1;

該函數的作用是取得一個數,將這個數加上1,再將結果返回。

3、調用時:

intresult=addOne(2);//此時result的值為3

函數括弧里的參數也可以為變數或能算出值的表達式

以上就是一個基本的函數,一般的函數都有返回值,也就是return後面跟的值,返回值可以為各種數據類型,如:int,float,double,char,a[](數組),*a(指針),結構或類(c++)

但不是所有函數都有返回值,如果某個函數無返回值,那麼返回值的位置則為「void」關鍵字,此時函數體中無返回值,即無return的值。但是函數中也可出現return,即一個空的return句子,其作用是使函數立即結束,如voidprint()//括弧中為空表示無傳遞參數、

printf("a");

printf("b");

return;//函數執行到此處結束

printf("c");

}//該函數只執行到return語句處,即屏幕上輸出的為"ab"

❷ c語言 去掉數組中重復的元素····求幫助

#include <stdio.h>
int main()
{
int a[]={1,2,1,7,3,2,3,4,5,8,7,6};
int i;
int j;
for(i=0;i<12;i++)
for(j=0;j<i;j++)
if(a[j]==a[i])
a[i]=0;
for(i=0;i<12;i++)
if(a[i]!=0)
printf("%d,",a[i]);
}
我這個方法不適用與數組中有0的情況,如果數組中有0的話,可以把a[i]=0和if(a[i]!=0)上的0改成其他數組中沒有的數就行了

❸ 設計演算法實現刪除順序表中多餘重復元素。如:對於順序表(1,2,3,1,3,4,3,5),利用C語言編程,謝了。

for(i=0;i<L->last-1;i++)
{
for(j=i+1;j<L->last;j++)
{
if(a[i]==a[j])

{
這里找到相同的比如在第三個的3和第五個的3是相同的那麼就第六個數字以及之後的向前移一位

}
}
}

❹ C語言刪除一個整型數組裡面重復的元素

利用雙重循環,將每個值依次與其後面的值相比較,如果有相同的則刪除該元素即可。

刪除時,可以使用將後面元素依次向前移動一位,同時總長度減一的方式。

參考代碼如下:

intremove_repeat(int*a,intl)
{
inti,j,k;

for(i=0;i<l;i++)
{
for(j=i+1;j<l;j++)//對後面每個元素比較,去重。
{
if(a[j]==a[i])//發現重復元素。
{
for(k=j+1;k<l;k++)//依次前移一位。
a[k-1]=a[k];
l--;//總長度減一。
}
}
}

returnl;//返回新的長度值。
}

❺ 除去一個數組中的重復的數據有什麼好演算法

這個問題的意思是,如果假設一個數組中存在重復的數據項,那麼就中保留重復數據項中的一個。也就是說最終輸出的結果數組中不容許存在重復數據項,所以因為這里涉及到重復數據項的問題,所以立馬想到了集合(Set)這個數據結構,因為它是不容序存在重復數據項的數據結構,
思路1.也就是將數組中的所有元素插入到一個Set中,利用Set的自動剔除重復數據項的功能,將導致所有重復數據項沒有辦法插入成功,也就是add方法
返回false,然後調用toArray方法,返回這個集合所對應的數組。那麼這個數組就是一個沒有重復數據項的數組,利用這個方法,通過比較結果數組和
源數組之間的大小,查看源數組中到底是否存在重復數據項。
思路2.除了利用Set這個數據結構不容序存在重復數據項的功能之外,還有一種很容易想到的方法,也就是對整個數組進行排序,然後遍歷排序之後的數組,將重復數據項,清除掉。
思路1的實現:
public static int[] noDup(int[] array) {

Set<Integer> set = new
HashSet<Integer>();

for (int i :
array)

set.add(i);

Integer[]
integers = (Integer[]) set.toArray();

int[] result
= new int[integers.length];

for (int i =
0; i < integers.length; i++)

result[i] =
integers[i];

return
result;
}

思路2的實現:
使用快速排序等演算法對數組進行排序,這個排序過程不在介紹。假設下面這個演算法的輸入是一個幾經排好序的數組。
for (int i = 0; i < array.length - 1; i++) {

if (array[i]
== array[i + 1]) {

array[i] =
-1;

}

}
通過上面這段代碼就能夠實現把數組中所有的重復數據項只保留一個,其它的置為-1或者根據實際情況置成其它值。然後遍歷數據,刪除所有位-1的數據項,並且將數組中包含的記錄個數不斷減少即可。

❻ 去掉一個數組里的重復元素,有沒有很高效的演算法

public static String[] get() {
String[] ss = {"a", "b", "a", "c", "b", "d", "c", "g"};
int len = ss.length;
int marklen = len;
for (int i = 0; i < len; i++) {
for (int j = i + 1; j < len; j++) {
if(ss[i] != null && ss[i].equals(ss[j])) {
ss[j] = null;
marklen = marklen - 1;
}
}
}

String[] ssStrings = new String[marklen];
int j = 0;
for (int i = 0; i < ss.length; i++) {
if(ss[i] != null) {
ssStrings[j] = ss[i];
j = j + 1;
}
}
return ssStrings;
}

其他數組同理

❼ c語言如何刪除數組中重復元素

1
/*
2
思路:
3
將字元串存入字元數組a中,設將值拷貝給數組b,遍歷b的每個元
4
素,與a中的每個元素比較,有相同則b中對應元素置為-1。
5
輸出b中不為-1的元素。
6
*/
7
#include<stdio.h>
8
#include<string.h>
9
char
a[100],b[100];
10
void
Del(int
index,int
len){
11
for(int
i=0;i<len;i++){
12
if(index
==
i)
continue;//下標相同即同一個元素不比較,進入下一個循環
13
if(b[index]
==
a[i])
b[index]=-1;//有相同元素,置值為
-1
14
}
15
}
16
int
main(){
17
gets(a);
18
memcpy(b,a,sizeof(a));//將a的元素拷貝給b
19
int
len=strlen(a);//求a的長度
20
for(int
i=0;i<len;i++){
21
Del(i,len);
22
}
23
for(int
i=0;i<len;i++){//輸出b中非-1的元素
24
if(b[i]!=-1){
25
printf("%c",b[i]);
26
}
27
}
28
return
0;
29
}

❽ C語言,刪除數組中的重復元素

#include <stdio.h>
#define N 1000
#define FLAG 0x80000000 /*特殊標記,用最小的負數表示*/
void main( )
{
int r[N], length, i, j;
scanf("%d", &length);
for(i = 0; i < length; i++)
scanf("%d", &r[i]);
for(i = 0; i < length - 1; i++)
{
if(r[i] != FLAG)
{
for(j = i + 1; j < length; j++)
if(r[j] == r[i]) r[j] = FLAG; /*遇到重復值,則先用特殊標記覆蓋它*/
}
}
for(i = 0; r[i] != FLAG; i++); /*找到第一個特殊標記*/
for(j = i + 1; j < length;) /*刪除數列中的特殊標記*/
{
if(r[j] != FLAG) r[i++] = r[j++];
else j++;
}
length = i; /*修改刪除重復值後的數列的長度*/
for(i = 0; i < length; i++)
printf("%-4d", r[i]);
}

閱讀全文

與刪除重復元素演算法相關的資料

熱點內容
minecraft最可怕伺服器地址 瀏覽:272
程序員選專業有必要嗎 瀏覽:30
如何重裝rpc伺服器 瀏覽:635
程序員必備的app 瀏覽:165
電動汽車加密幣 瀏覽:960
xp支持多少層文件夾 瀏覽:648
阿里雲伺服器防禦指標 瀏覽:893
cc網路編程學習 瀏覽:458
單片機又叫微控制器對嗎 瀏覽:660
安卓軟體商店如何評分 瀏覽:655
linuxexecv 瀏覽:614
蘋果照片視頻文件夾 瀏覽:390
cdes加密解密演算法 瀏覽:752
app發版如何讓運營及時配活動 瀏覽:799
python結束界面 瀏覽:483
貴州兒童編程培訓 瀏覽:535
非對稱型密碼演算法 瀏覽:689
安卓qq分享屏幕怎麼分享電視聲音 瀏覽:935
雲之家程序員 瀏覽:623
怎麼讓表格中的名稱生成文件夾 瀏覽:186