欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

消除重复数

程序员文章站 2022-06-02 13:03:21
...

 

问题描述: 这是一道外企算法的面试题,前提是不允许使用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 <[email protected]>
 * 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 <[email protected]>
 * 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();
	}
}