网易2017实习生招聘机试题消除重复元素

题目:

小易有一个长度为n序列,小易想移除掉里面的重复元素,但是小易想是对于每种元素保留最后出现的那个。小易遇到了困难,希望你来帮助他。

输入描述:输入包括两行:

第一行为序列长度n(1 ≤ n ≤ 50)
第二行为n个数sequence[i](1 ≤ sequence[i] ≤ 1000),以空格分隔

输出描述:输出消除重复元素之后的序列,以空格分隔,行末无空格

输入例子:

9

100 100 100 99 99 99 100 100 100

输出例子:

99 100

当题主拿到这题的时候,觉得,嗯,这个题目不难,放在第一题很正常,也很有思路,刷刷刷地在eclipse里面码了起来,但我一开始是用HashSet的方法编的,样例的输入输出是对的,但是复制到Web调试框里,不管怎么调试都是不通过,百思不得其解后,因为考试时间有限,就先用了别人的代码。因为不服气,隔天揣摩了一下,一定要自己的代码能通过,于是发现了原因。

HasSet里是不允许出现相同的元素,但是HasSet底层是会自动按升序排列元素的,而题设要求保留相同元素最后出现的那个,所以这里就矛盾了,用HashSet方法显然是行不通的,而且不能确定元素的加入顺序,所以还是乖乖地用ArrayList方法吧。

代码如下:

需要注意的是:因为集合是倒序加入元素的, 所以在输出的时候要将集合中的元素再倒序输出,才能保证输出的是最后相同的元素,关键就这点,还是要逻辑清晰才行,题目还是不难的,关键要明确思路。

import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner scan=new Scanner(System.in);
		while(scan.hasNextLine())
		{
			String num=scan.nextLine();
			String str=scan.nextLine();
			find(str);
		}
	}	
	public static void find(String str)
	{
		String[] ch=str.split(" ");
		List<String> list=new ArrayList<String>();		
/*从最后取元素加入集合,
     这样才能保证是把最后相同的元素留下,
     为后面倒序输出做铺垫
 */
		for(int i=ch.length-1;i>=0;i--)  
			{
				if(!list.contains(ch[i]))
					list.add(ch[i]);		
			}
/*因为集合是倒序加入元素的,
     所以在输出的时候要将集合中的元素再倒序输出,
     才能保证输出的是最后相同的元素
 */
		for(int i=list.size()-1;i>=0;i--) 
		{
			if(i!=0)
				System.out.print(list.get(i)+" ");
			else
				System.out.print(list.get(i));
		}
	}
}

  

原文地址:https://www.cnblogs.com/Jocelyn66/p/6627262.html