问题描述: 这是一道外企算法的面试题,前提是不允许使用util包中任何类,即任何集合类都不允许使用。 写出的算法效率越高,此题得分越高,大家可以试一下。题目是输入一串已经排序好的数组,输出消除重复数之后的数组。如:
输入{ 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5 };输出{ 1, 2, 3, 4, 5 };
算法实现1:
/**
* Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC)
* All rights reserved.
* Author: Jarg Yee <yeshaoting@gmail.com>
* http://jarg.iteye.com/
*/
/*
*
*/
public class Distinct2
{
public static void main(String[] args)
{
int[] arr = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5};
int[] arr2 = new int[arr.length];
System.out.print("结果集:");
int count = 0; //记录结果集中元素数
for(int i=0; i<arr.length; i++)
{
//第一次或者当前值不存在队列的情况
if(i==0 || arr2[count-1]!=arr[i])
{
System.out.print(arr[i] + "\t");
arr2[count++] = arr[i];
}
}
}
}
算法实现2:
/**
* Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC)
* All rights reserved.
* Author: Jarg Yee <yeshaoting@gmail.com>
* http://jarg.iteye.com/
*/
/*
* 消除重复数(已经排序好的数组)
* 采用队列的思想,将非重复的元素放入到队列中
* 记录所存元素开始和结束的索引,据此输出结果
*/
public class Distinct
{
private static int[] arr = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5};
private Queue q = new Queue();
//内部类 - 队列类
class Queue
{
int front = 0, rear = 0; //分别表示队首,队尾
int[] queue = new int[arr.length];
//判断队列是否为空
public boolean isEmpty()
{
if(rear-front == 0)
return true;
return false;
}
//出队(不判断队列是否为空)
public int deQueue()
{
return queue[front++];
}
//入队
public void enQueue(int element)
{
queue[rear++] = element;
}
//获取队尾元素
public int getQueueRear()
{
return queue[rear-1];
}
//输出队列元素
public void display()
{
System.out.print("结果集:");
for(int i=front; i<rear; i++)
{
System.out.print(deQueue() + "\t");
}
}
}
/** for debugging. */
public static void main(String[] args)
{
Distinct obj = new Distinct();
int current;
for(int i=0; i<arr.length; i++)
{
current = arr[i];
//第一次或者当前值不存在队列的情况
if(i==0 || obj.q.getQueueRear()!=current)
{
obj.q.enQueue(current);
}
}
obj.q.display();
}
}
分享到:
相关推荐
"C编程中常见的几种删除重复字符或者数字的方法" C语言是一种广泛使用的高级编程语言,它广泛应用于操作系统、嵌入式系统、数据库等领域。对于字符串的处理是C语言编程中的一个非常重要的方面,其中删除重复字符...
筛选法是一种遍历数组或列表,检查并删除重复项的算法。在本示例中,它通过两层循环实现:外层循环遍历每个元素,内层循环则比较该元素与之后的所有元素,如果找到重复项,则将其标记为0(或任何特定值),以便后续...
在开始删除重复记录之前,首先需要确定哪些记录是重复的。以下SQL语句可以用来查询`test`表中所有字段都重复的记录: ```sql SELECT * FROM test GROUP BY name, age, sex, id, sf HAVING COUNT(*) > 1; ``` 这里...
优点:这种方法可以灵活地删除重复记录,且可以根据需要指定删除的记录数。 缺点:使用游标可能会影响数据库性能,且需要注意游标的使用。 Knowledge Point 3: 使用存储过程删除重复记录 在这种方法中,我们创建...
本文将详细介绍如何在不同的数据库系统(如MySQL、SQL Server、Oracle等)中删除重复记录。 #### SQL删除重复记录的基本思路 删除重复记录的核心思想是先识别出哪些记录是重复的,然后通过某种方式将这些重复记录...
2. 使用 SQL 语句删除重复记录:rs = exec(conn, 'SELECT * FROM TABLE_NAME WHERE ID IN (SELECT MIN(ID) FROM TABLE_NAME GROUP BY REPEAT_FIELD)'); 其中,TABLE_NAME 是数据库表的名称,REPEAT_FIELD 是重复...
在本例中,我们关注的是如何处理一维数组,即线性数组,来删除重复的元素。 描述中提到的“查找重复元素并删除重复”是实现目标的关键步骤。这通常涉及到以下操作: 1. **查找重复元素**:在LabVIEW中,可以通过...
6. **自动化过程**:如果经常需要进行此操作,可以考虑编写VBA宏或者使用Access的模块功能,自动化整个删除重复数据的过程。这样,只需点击一下按钮,Access就能自动检查并删除重复数据。 7. **预防措施**:为了...
本文将详细介绍批量删除重复文件的工具及其重要性,以及如何利用“DoubleKiller.exe”这一实用工具来解决这一问题。 批量删除重复文件工具的主要功能是快速检测并移除系统中相同内容的文件,以释放存储空间,提高...
1.4.1版本可能提供了清晰的接口供外部调用,例如添加数据、检查重复、删除重复等方法。 总之,"重复数据删除技术源代码C语言"是一个涉及数据结构、哈希算法、比较逻辑和性能优化的复杂工程。通过深入分析和理解...
位与运算的结果可以有效地消除重复的位,因为每个数字的每一位只会在第一次遇到时置1,之后再遇到相同的数字,对应位已经为1,不会改变。而位或运算的结果会保留所有出现过的位,即使多次出现也不会改变。 具体步骤...
在IT领域,尤其是在日常计算机操作和数据管理中,批量删除重复的文件是一项常见的需求。这不仅可以节省存储空间,还能保持文件系统的整洁。本篇将详细探讨如何实现这一目标,主要聚焦于“批量删除重复的文件”这个...
Excel 删除重复数据行的方法和技巧 Excel 作为一个功能强大的电子表格处理软件,经常需要处理大量的数据。在实际工作中,我们常常会遇到重复数据的問題,这些重复数据不仅占用空间还会影响数据的分析和处理效率。...
3. 去除:选择要删除的重复文件后,工具会执行删除操作,同时可以设置保留一个原始文件或根据创建时间、修改时间等标准保留最新的或最早的副本。 对于NAS设备,如群晖或威联通,虽然它们通常配备有Web界面的管理...
这款工具利用了C语言的高效性和跨平台优势,能够快速处理大量数据,这对于识别和删除重复图片至关重要。C语言之所以适合编写这样的工具,是因为它能够让开发者更贴近底层,直接操作内存和文件系统,从而实现更高效的...
在替换字段中留空,这样每次找到重复行时,它都会被删除,从而达到去重目的。如果数据量庞大,建议分批操作,以避免一次性处理过多数据导致编辑器卡顿。 此外,EditPlus还支持宏录制和播放,这对于执行重复任务非常...
ArcGIS删除重复点 在 ArcGIS 中删除重复点是GIS数据处理中的一个重要步骤。重复点的存在可能会导致数据分析和处理结果不准确,影响后续的空间分析和应用。本文将介绍使用 ArcGIS 删除重复点的方法,并详细解释每一...
为了应对这一挑战,有位热心的开发者编写了名为《慈众文本删除重复工具》的软件,旨在为用户提供一种快捷有效的处理重复文本行的解决方案。 该工具的核心功能可归纳为两种模式:一种是彻底删除重复行,另一种是保留...
"顺序表中删除重复元素" 删除重复元素是顺序表中的一种常见操作,旨在从顺序表中删除重复的元素,保持顺序表的唯一性和有序性。在本实验中,我们将使用C语言来实现顺序表中删除重复元素的功能。 数据结构 在本...
在VB.NET编程中,处理数组时经常会遇到需要删除重复元素的情况。这有助于优化数据结构,减少内存占用,尤其是在处理大量数据时。本示例提供的源码和可执行程序旨在演示如何在VB.NET环境中有效地实现这一功能。以下是...