`
finux
  • 浏览: 202503 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

删除数组内重复的数据

    博客分类:
  • CPP
J# 
阅读更多

笔试时曾经遇到过的一道题,当时没有好的想法。

今天无意中想起,于是把自己的一种解决方法记下来。

1. main.cpp

/**
 * 问题描述:
 * 删除数组内重复的数据
 *
 * 一个解决方法:
 * 可以先将数组排序,然后再删除
 * 如一个已经排好序的整数数组:1, 1, 2, 2, 3
 */

#include <iostream>

using std::cout;
using std::endl;
using std::swap;

/**
 * 打印数组
 */
template<class T>
void printArray(const T array[], const int size);

/**
 * 将数组排序,选择排序
 */
template<class T>
void sort(T array[], const int size);

/**
 * 对已经排好序的数据
 * 将数组内重复的数据删除
 * @return int 删除重复数据后数组的大小
 */
template<class T>
int deleteRepeatedData(T array[], const int size);

int main(int argc, char *argv[]) {
    int array[] = {9, 1, 1, 8, 2, 3, 3, 4, 3, 3, 5, 9, 7, 8, 2, 6, 9, 1, 9, 0, 9, 0};
    int size = sizeof(array) / sizeof(int);
    cout<<"A initial int array: "<<endl;
    printArray(array, size);
    
    cout<<"\nAfter sort: "<<endl;
    sort(array, size);
    printArray(array, size);

    cout<<"\nAfter delete repeated data: "<<endl;
    size = deleteRepeatedData(array, size);
    printArray(array, size);
}

/**
 * 打印数组
 */
template<class T>
void printArray(const T array[], const int size) {
    for (int i=0; i<size-1; i++) {
        cout<<array[i]<<", ";
    }
    cout<<array[size-1]<<endl;
}

/**
 * 将数组排序,选择排序
 */
template<class T>
void sort(T array[], const int size) {
    for (int i=0; i<size-1; i++) {
        int min = i;
        for (int j=i+1; j<size; j++) {
            if (array[min] > array[j]) {
                min = j;
            }
        }
        if (min != i) {
            swap(array[i], array[min]);
        }
    }
}

/**
 * 对已经排好序的数据
 * 将数组内重复的数据删除
 * @return int 删除重复数据后数组的大小
 */
template<class T>
int deleteRepeatedData(T array[], const int size) {
    int j = 0;
    for (int i=0; i<size-1; i++) {
        while (array[i] == array[i+1]) {
            i++;
        }
        array[j++] = array[i];
    }
    return j;
}

 

2. main.cpp download

注:发表于: 2008-11-10 ,修改于: 2009-05-16 13:24,chinaunix

  • src.rar (768 Bytes)
  • 下载次数: 2
分享到:
评论
2 楼 finux 2010-04-21  
cnSpirit 写道
我没怎么看明白,呵呵。
那个,既然是数组的话,你怎么能够删除掉元素呢?
第86行这个函数改变不了数组长度吧?
而且89行的代码是不是会造成下标越界呢?
比如传入数组=[1,1,1],size=3时候,在for循环i=0时候,while循环动作如下:
1.  i=0,array[0]=array[1], i++
2.  i=1,array[1]=array[2], i++
3.  i=2,array[2]=array[3??]...


对了finux,我刚刚签了一家公司,无忧创想,www.51cto.com,做网站的,呵呵

恭喜恭喜!牛X,请吃饭哦,嘻嘻。。。
注意deleteRepeatedData要返回经过删除操作的数组的大小。事实上数组的大小并没有改变,只是把没有重复数据往前排,然后再把没有重复的数据的大小返回。这样,其实就是把重复的数据删除了嘛。若是有更OK的方式,欢迎一起讨论哦~
1 楼 cnSpirit 2010-04-21  
我没怎么看明白,呵呵。
那个,既然是数组的话,你怎么能够删除掉元素呢?
第86行这个函数改变不了数组长度吧?
而且89行的代码是不是会造成下标越界呢?
比如传入数组=[1,1,1],size=3时候,在for循环i=0时候,while循环动作如下:
1.  i=0,array[0]=array[1], i++
2.  i=1,array[1]=array[2], i++
3.  i=2,array[2]=array[3??]...


对了finux,我刚刚签了一家公司,无忧创想,www.51cto.com,做网站的,呵呵

相关推荐

    LabVIEW 删除数组中重复元素实例

    总之,“LabVIEW 删除数组中重复元素实例”这个主题涵盖的是如何在图形化编程环境下有效地处理数组数据,确保其唯一性。通过理解数组操作的基本原理,结合LabVIEW提供的工具和函数,我们可以创建出高效且易于维护的...

    jquery删除数组中重复元素

    话不多说,下面就跟着小编来看下利用jquery实现删除数组中重复元素的具体思路吧 首先定义如下数组: var arr=[0,2,3,5,6,9,2]; 我们可以看到数组中存在重复元素’2′; 最后通过jquery筛选应该得到[0,2,3,5,6,9]; ok...

    matlab中如何去掉数组中重复的值

    Matlab 中去掉数组中重复的值 Matlab 是一个功能强大的数学和技术计算软件,对于数据处理和分析有着广泛的应用。...通过这两种方法,我们可以轻松地删除重复数据,避免数据处理中的错误和不一致性。

    删除数组中的重复元素

    这是一个用C++编的删除数组中的重复元素的程序~

    二维数组去除重复项

    通过上述分析,我们可以看出,`unique_arr`函数提供了一种有效的方法来处理二维数组中的重复数据,同时提供了灵活性,允许用户选择是否保留键名。这对于数据预处理、数据分析以及数据库操作等场景非常有用。然而,...

    删除数组重复元素(VB.NET)

    总之,VB.NET中删除数组重复元素是一个常见的需求,可以通过多种方式实现,关键在于选择合适的方法并优化性能。提供的源码和可执行程序是一个很好的学习和实践起点,帮助开发者理解如何在实际项目中解决此类问题。

    Labview去处掉数组重复的元素

    this vi is capble to remove the duplicated elements in the labview array.

    易语言源码易语言删除数组重复成员源码.rar

    删除数组重复成员的过程通常涉及遍历数组,比较相邻元素,如果发现有重复,就将其删除。但在易语言中,我们不能直接删除数组中的某个元素,因为易语言的数组是静态的,一旦定义,大小就不能改变。因此,我们需要创建...

    java删除数组或是集合中重复的数据

    java删除数组或是集合中重复的数据

    labVIEW 1D数组数据查重

    labVIEW 在获取数据的时候,1D数组中会存在重复的元素,那么当以想要知道重复元素有什么,和重复元素的个数是,就可以用本VI 进行数据解析。同时会做一下数据拼接,将元素以及元素数输出。

    易语言删除数组重复成员源码.zip

    删除数组重复成员的方法有很多种,一种常见的是使用双重循环,外层循环遍历数组,内层循环检查当前元素是否与后面元素重复,如果重复则删除后面的元素。但这种方法可能会导致数组长度变化,处理起来较为复杂。另一种...

    易语言数组加速去重复

    首先,数组去重复是编程中常见的数据处理任务,目的是从包含多个元素的数组中删除重复的元素,保持数组中每个元素的唯一性。在易语言中,实现这个功能通常需要遍历数组,比较每个元素与已处理过的元素是否相同,若...

    删除定制整型数组中重复元素输出剩余元素

    总的来说,Java中删除整型数组重复元素的核心在于选择合适的数据结构(如HashSet)和适当的转换方法。通过这种方式,我们可以有效地处理数组中的重复值,提高数据处理的效率和准确性。对于初学者,掌握这些基础知识...

    Labview一维数组删除重复项

    本教程将详细讲解如何在LabVIEW中使用一维数组删除重复项,以确保数组中的元素唯一。 首先,我们需要理解LabVIEW的基本操作。LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种图形化编程语言...

    易语言删除数组重复成员

    本文将详细讲解如何在易语言中实现删除数组重复成员的功能。 易语言是一款国产的、以中文编程为特色的编程环境,它旨在降低编程难度,让编程更加直观易懂。易语言提供了丰富的内置函数和结构,使得处理数组变得简单...

    JavaScript移除数组内重复元素的方法

    这种方法不仅代码更简洁,而且执行效率也很高,是目前移除数组重复元素推荐的做法。 总结一下,在学习和使用JavaScript进行数组去重时,可以根据具体的应用场景和ES版本选择合适的去重方法。对于ES6之前的版本,...

    易语言删除数组重复成员源码.rar

    对于易语言初学者而言,“易语言删除数组重复成员源码.rar”不仅是一个实用的工具,更是一个学习易语言编程和提高数据处理能力的宝贵资源。通过实际编码实践,我们可以更加深入地掌握易语言数组操作的精髓,进而提升...

    JS数组去掉重复数据只保留一条的实现代码

    外层循环遍历原数组,内层循环检查当前元素是否已经存在于新数组中。如果不存在,就将其添加到新数组中。这种方法的时间复杂度较高,为O(n^2),因为它需要对每个元素进行一次完整的遍历检查。 ```javascript var ...

Global site tag (gtag.js) - Google Analytics