• 网易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));
    		}
    	}
    }
    

      

  • 相关阅读:
    C语言基于单链表得学生成绩管理系统
    C语言实现扫雷小程序外挂,棒棒的
    小白学习C语言一定要掌握的那些知识点!
    C语言快速入门教程之10分钟快速掌握数据类型
    神奇的C语言,这才是C语言大牛操作,作为面试题,怕是秒杀众人
    多线程
    java基础- Collection和map
    String 和 new String
    idea快捷键
    用bootstrap 分页插件问题
  • 原文地址:https://www.cnblogs.com/Jocelyn66/p/6627262.html
Copyright © 2020-2023  润新知