❶ 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函数擦除从这个元素到最后元素的所有的元素.
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]);
}