0 0

从数组中删除重复的元素,并考虑算法的执行效率0

写一个函数来从数组中删除重复的对象。维持秩序。例如,如果输入的数组[ 1,5,4,2,7,2,6,5 ],结果应该是[ 1,5,4,2,7,6 ]。实施时应执行速度的优化。
 
2014年8月06日 14:57

4个答案 按时间排序 按投票排序

0 0

采纳的答案

最快的算法肯定是O(n)
具体做法是:
1,准备一个HashMap或者HashTable
2,循环你的输入数组,判断他是否在HashMap中,如果不是,输出,并且加入到HashMap中(比如:Map.put(1,true)),如果是在HashMap中则什么都不做。

因为HashMap的读取和设置是O(1)的时间复杂度,所以加上循环整体的时间复杂度也是O(n)

2014年8月06日 17:34
0 0

首先我们要明白目的就是去重,逻辑就是从头到尾挨个看其中一个元素有没有重复。
那么一般有两个逻辑

  • 从头到尾挨个遍历,发现后面有重复的就移除,并移动全部元素(时间代价很高)
  • 利用散列原理的数据结构,另外构建该结构,并利用散列值来去重。比如java中的hashtable。


你题中只要求效率,这个一般就指的不考虑空间效率了,那么你就可以使用java中hashtable 或者其他语言中的类hashtable的数据结构。


注:hashtable 或者散列结构的数据结构,其存储地址是随机不连续且根据存储的值计算出来的因此在查找某一个元素的时候的速度非常快,因为不用遍历。

最后把hashtable转成数组,或者不转直接拿来用。

2014年8月07日 09:11
0 0

难点
1)数组,如果是链表可能会比较容易些:也就是移走重复的后,不能留下空洞
2)去重:应该是只需要扫描数组一遍,否则性能不太好.
3)排序的稳定,也就是顺序保持不变.

方案:
使用Bitmap来依次检查重复
         如果重复, 则后面所有的数组节点往前移一个位置. 具体的代码可以参考ArrayList.remove()
         如果没有重复,遍历数组下一节点


评价:
只需要引入一个Bitmap,内存消耗非常小
检索去重,性能很快,只需要一次运算即可
不需要使用一个新的数组来对考



2014年8月06日 16:17
0 0

TreeSet ts = new TreeSet(Arrays.asList(arr));

2014年8月06日 16:14

相关推荐

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

    在VB.NET编程中,处理数组时经常会遇到需要删除重复元素的情况。这有助于优化数据结构,减少内存占用,尤其是在处理大量数据时。本示例提供的源码和可执行程序旨在演示如何在VB.NET环境中有效地实现这一功能。以下是...

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

    在易语言中,处理数组是非常常见的操作,而删除数组中的重复成员则是一个实用的功能,特别是在处理数据去重、优化存储效率时。下面将详细讲解如何在易语言中实现这一功能。 首先,我们需要理解易语言中的数组概念。...

    JS 清除字符串数组中,重复元素的实现方法

    本文讲述了使用JavaScript清除字符串数组中重复元素的四种不同实现方法。文中提到的四种方法各有优劣,分别包括普通遍历法、复制数组法、正则表达式法和关联结构法。这些方法能够适用于不同规模的数组数据,并能有效...

    JavaScript实现删除数组重复元素的5种常用高效算法总结

    在JavaScript中,数组去重是一个常见的需求,尤其是在处理数据时,为了提高数据处理的准确性与效率,去除数组中的重复元素是非常必要的。本篇总结了5种常用且高效的算法来实现数组去重,并在实现过程中结合实例详细...

    c# 两个数组比较,将重复部分去掉,返回不重复部分的实现

    在C#编程中,有时我们需要比较两个数组并找出它们之间的不重复元素。这在数据处理、集合操作或者算法实现中非常常见。本篇文章将详细介绍如何在C#中实现这个功能,通过一个具体的示例来展示如何比较两个数组,并将...

    易语言源码易语言双数组去重复数源码.rar

    在实际应用中,去除重复元素的操作可能需要考虑效率和内存占用,尤其是在处理大数据集时。因此,理解并优化这种算法对于提升程序性能至关重要。如果你对易语言或数组处理有兴趣,这个源码将是一个不错的学习资源。

    js代码-给定一个数组a和一个长度值l,生成一个指定长度值为l的新数组b,要求b中的每一个元素都是从a中随机获取的,且数组元素不可重复。

    在JavaScript编程中,题目所描述的任务是生成一个指定长度的新数组,这个新数组的元素是从给定的原数组中随机抽取且不重复的。这是一个典型的数组处理和随机数生成问题,涉及的知识点主要包括: 1. **数组操作**:...

    leetcode-数组

    通过解决 LeetCode 中的这些数组问题,开发者可以提升对数组操作的熟练度,提高算法效率,并掌握如何在实际编程中应用这些技巧。此外,这些题目也常常出现在面试中,因此熟悉它们对于求职者来说至关重要。不断练习和...

    “C语言程序设计”课程数组教学方法的探索.pdf

    3. 数组的遍历:讲解如何通过循环结构(例如for循环和while循环)遍历数组中的每个元素,并执行相应的操作。 4. 数组的排序和搜索算法:教授学生如何使用不同的排序算法对数组进行排序,以及如何运用搜索算法在数组...

    JavaScript基于对象去除数组重复项的方法

    在JavaScript编程中,处理数组是常见的任务之一,其中包括去除数组中的重复元素。传统的做法是使用多层循环进行比较和删除,这种方法效率低下且代码冗余。然而,JavaScript对象的一个特性——键的唯一性,为解决这个...

    去除重复-易语言.zip

    对数组进行排序后,重复的数据会相邻,通过遍历排序后的数组,可以更容易地识别并去除重复元素。易语言中的“数组排序”命令可以帮助我们完成排序操作。 5. 哈希函数: 虽然易语言没有内置的哈希表,但可以通过...

    排序查找算法总结

    它的工作原理是:从图中选择一个节点,将其删除,然后将其所有邻居节点添加到已排序元素中,重复这个过程直到所有节点都已经排序好了。拓扑排序的时间复杂度为O(n+k),空间复杂度为O(n+k)。拓扑排序适用于有向无环图...

    用筛选法删除输入的10个数中的重复的数

    在IT领域,尤其是在编程与数据处理方面,筛选法是一种常用的技术,用于从数据集中移除重复元素,确保数据集的唯一性与准确性。本文将基于给定的代码示例,深入探讨如何使用筛选法来删除输入的10个数中的重复数字,并...

    实验5 数组实验1

    选择法排序是一种简单的排序算法,它重复地从未排序的序列中找到最小(或最大)元素,放到排序序列的起始位置,直到所有元素均排序完毕。在实验中,需要理解并实现这个算法。 ### 6. 程序改错与跟踪调试 在实验的第...

    c语言算法五大特性-计算机算法必须具备哪5个特性?,算法数据结构

    除了这些基本特性,还需要理解算法的其他重要概念,如时间复杂度和空间复杂度,它们衡量了算法执行效率和所需内存。在C语言中,熟练掌握这些特性并结合数据结构(如数组、链表、树、图等)的知识,可以设计出高效且...

    算法导论经典书籍

    时间复杂度通常用来描述算法执行时间与输入规模之间的关系,而空间复杂度则关注算法执行过程中所需存储空间的量。《算法导论》通过渐进符号详细介绍了算法的理论分析方法。 #### 概率分析与随机算法 随机算法是指...

    22图灵-过程考核-循环+数组_ans.rar.rar

    在这个“过程考核”中,可能涉及的具体任务可能包括编写实现特定功能的循环代码,设计和实现数组操作,优化算法效率,或者解决涉及循环和数组的编程问题。这要求学生对循环的控制逻辑有深入理解,能够灵活运用数组...

    数据结构中经典算法分析.pdf

    算法与数据结构的关系密不可分,算法依赖于数据结构,并影响算法选择和执行效率。算法的设计需要考虑如何在操作时优化计算机的性能,包括存储空间和运行速度。算法研究的目的是优化代码和提高程序的执行效率。 ### ...

    古罗马杀人游戏-数组方法

    4. **优化算法**:为了提高效率,可以使用一些技巧,比如哈希映射存储每个玩家的存活状态,减少重复检查,或者使用并查集等数据结构来更高效地处理“杀人”关系。 在提供的文件中,`Java实验5.doc`可能是关于如何用...

    恋上数据结构与算法课件.rar

    在计算科学中,复杂度主要指的是时间复杂度和空间复杂度,它们用来衡量算法执行效率。时间复杂度表示算法运行所需的时间与输入数据量的关系,而空间复杂度则关注算法在执行过程中所占用的内存。理解这两个概念有助于...

Global site tag (gtag.js) - Google Analytics