zoukankan      html  css  js  c++  java
  • [程序员代码面试指南]第9章-一种消息接收并打印的结构(链表)

    题意

    数据流读入数字(保证>=1),i最初=0,当i+1出现时,输出i+1及其后连续的输入过的数字,否则什么也不输出。
    例子:
    输入:1 输出:1
    输入:3 输出:
    输入:4 输出:
    输入:6 输出:
    输入:2 输出:2 3 4

    题解

    用链表+headMap+tailMap存。
    总时间复杂度O(n).

    代码

    import java.util.HashMap;
    import java.util.Scanner;
    
    class Node{
    	int val;
    	Node next;
    	public Node(int val) {
    		this.val=val;
    	}
    }
    
    class Message{
    	HashMap<Integer,Node> headMap=new HashMap();
    	HashMap<Integer,Node> tailMap=new HashMap();
    	int lastPrint=0;
    	
    	public void receive(int num) {
    		Node node=new Node(num);
    		headMap.put(num, node);
    		tailMap.put(num,node);
    		
    		if(headMap.containsKey(num+1)) {
    			node.next=headMap.get(num+1);
    			headMap.remove(num+1);
    			headMap.put(num,node);
    		}
    		if(tailMap.containsKey(num-1)) {
    			tailMap.get(num-1).next=node;
    			tailMap.remove(num-1);
    			tailMap.put(num,node);
    		}
    		if(headMap.containsKey(lastPrint+1)) {
    			print();
    		}
    	}
    	
    	private void print() {//
    		Node node=headMap.get(lastPrint+1);
    		headMap.remove(lastPrint+1);
    		while(node.next!=null) {
    			System.out.println(node.val);
    			++lastPrint;
    			node=node.next;
    		}
    		System.out.println(node.val);
    		++lastPrint;
    		tailMap.remove(node.val);
    	}
    }
    
    public class Main {
    	public static void main(String args[]) {
    		Scanner in=new Scanner(System.in);
    		Message mes=new Message();
    		while(in.hasNext()) {
    			int num=in.nextInt();
    			mes.receive(num);
    		}
    	}
    }
    
  • 相关阅读:
    CentOS 7.4 如何安装 MariaDB 10.3.9 Stable 数据库
    xxx is not in the sudoers file. This incident will be reported.
    CentOS 7.4 上如何安装 tomcat 9
    CentOS 7.4 下面安装 jdk 10 的一点总结
    CentOS 7.4 下安装 Nginx
    MySQL数据库常用操作
    chart学习
    Ext需要的文件目录
    获取浏览器信息
    运行容器
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/11025993.html
Copyright © 2011-2022 走看看