自己编写一个数组去掉重复元素的函数

自己研究编了一个数组去重的函数,看到过其他人编写的,不过大多数都是已付出很大的存储空间为代价,于是自己编写了一个函数,有好的意见或思想欢迎和我一起分享!

#include <stdio.h>
#include <string.h>

#define MAX_FRIEND 100

int repeats_num[MAX_FRIEND];

/*升序排序*/
int comp_int_inc(void *a,void *b)
{
return ( *((int *)a) - *((int *)b) );
}

/*
** 作用 : 去除数组中重复的数据
** 输入 : arr_size : 元数组元素个数
** 返回 :去除重复数据后,新数组中元素的个数
*/
int remove_repeat(int int_arr[],int arr_size)
{
int i,j = 0,arr_newsize = 0;
int zeroFlag = 0;

if(arr_size == 1) //只有1个元素时直接返回
return 1;

memset(repeats_num,0,MAX_FRIEND);
qsort(int_arr,n,sizeof(int_arr[0]),comp_int_inc); //讲数组按升序排序

for( i = 0; i < arr_size - 1; i++)
{
if( int_arr[i] != int_arr[i + 1] )
{
int_arr[j] = int_arr[i];
j++;
arr_newsize++;
}
else
repeats_num[j]++; //记录新数组中的元素在元数组中重复次数
}

int_arr[j] = int_arr[arr_size - 1]; //录入最后一个元素,同时解决数组元素全相同的情况
arr_newsize++;

memset(int_arr + arr_newsize,0,sizeof(int) * (arr_size - arr_newsize)); //清空元素组后面多余的元素

return arr_newsize;
}

时间: 2024-10-06 07:26:05

自己编写一个数组去掉重复元素的函数的相关文章

消除一个数组中重复的元素

使用JavaScript消除一个数组中重复的元素 var arr1 = [1,1,2,3,4,5,6,6,6,7],arr2 = []; for(var i=0;i<arr1.length;i++){ if(arr2.indexof(arr1[i] < 0){ arr2.push(arr1[i]); } } document.write(arr2); //1,2,3,4,5,6,7

去除数组中重复元素

问题 统计一个一维数组中的各个元素的个数,然后删除多出来的重复元素,并输出结果. 例如:[1,2,2,2,3,3,3,3,3]-->[1,2,3] 解决思路 将重复元素的列表中的重复元素进行统计,并将统计结果放在dictionary中,key为元素,value为该元素的个数 然后通过for获取key,得到一个新的列表,就是没有重复元素的列表 解决(Python) #!/usr/bin/env python #coding:utf-8 def count_element(one_list): el

统计数组中重复元素个数

/** * 循环统计数组或集合中的重复元素个数 * @param args */ public static void main(String[] args) { Map<String, Integer> map = new HashMap<String, Integer>(); String[] ss = {"白","黑","绿","白"}; for (int i = 0; i < ss.len

面试题--&gt;写一个函数,返回一个数组中所有元素被第一个元素除的结果

1 package com.rui.test; 2 3 import java.util.Random; 4 5 /** 6 * @author poseidon 7 * @version 1.0 8 * @date:2015年10月25日 上午11:12:24 9 * @description: 面试题-->写一个函数,返回一个数组中所有元素被第一个元素除的结果 10 * 陷阱: 11 * 1.循环需要倒着写,为什么? 12 * 想想顺着写循环的结果,第一个元素的值会发生变化门后面再除就会有问

求解一个数组中连续元素最大值

第一种实现是以O(N3) 即以n的三次方实现的,这个算法很简单,想法特别明显 第二种以O(N2) 即以n的二次方实现,算法简单,但是仍然不够好 第三种 O(N*log(N)) ,以n乘以log(N),采取分治法解决问题,当然也采取了递归的思想. 第四种O(N),这个方法就无敌了,线性时间,如果数组是在磁盘或者磁带上面,只需要读取数组,不需要存储在内存上面(联机算法),此算法简洁高效,最理想的算法 5 int f1(int p[],int left,int right){ 6 int tmp; 7

数组去掉重复值

1.一维数组 array_unique(); 2.二维数组 //todo 二维数组去掉重复值class array_table { function array_unique_fb($array2D) { foreach ($array2D as $v) { $v = join(",", $v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串 $temp[] = $v; } $temp = array_unique($temp); //去掉重复的字符串,也就是重

[编程之美]写一个函数,返回一个数组中所有元素被第一个元素除的结果

题目: 写一个函数,返回一个数组中所有元素被第一个元素除的结果: 错误的版本: void DivArray(int *array, int n) { for (int i = 0; i < n; ++i) { array[i] /= array[0]; } } 错误原因:在循环的第一步,第一个元素就变成了1,然后再用它去除以其他元素,就不符合题目要求了 改进: 1:使用其他变量保存第一个元素: void DivArray3(int *array, int n) { assert(array !=

list去掉重复元素

需求: 有list 里面含有重复元素,要求去掉重复元素: solution 1: >>> a [1, 2, 2, 1, 3, 4, 5, 6, 5] >>> set(a) set([1, 2, 3, 4, 5, 6]) >>> list(set(a)) [1, 2, 3, 4, 5, 6] set操作是 Build an unordered collection of unique elements. solution 2: >>>

在angular中使用ng-repeat时数组中有重复元素,要用item in items track by $index

在angular中使用ng-repeat时数组中有重复元素,要用item in items track by $index,不然会报错 <div class="" ng-init="names=[1,2,3,4,5,5]"> <p>循环对象:</p> <ul> <li ng-repeat="x in names track by $index"> {{ x }}</li> &