zoukankan      html  css  js  c++  java
  • 网易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));
    		}
    	}
    }
    

      

  • 相关阅读:
    JavaScript面试题
    HTML&&css面试题
    nodejs面试题
    linux上安装apache
    linux上安装mysql
    linux基础命令学习(三)Vim使用
    linux基础命令学习(一)
    spring学习(六)注解方式实现AOP
    spring学习(五)详细介绍AOP
    spring学习(一)spring简介
  • 原文地址:https://www.cnblogs.com/Jocelyn66/p/6627262.html
Copyright © 2011-2022 走看看