首页 > 试题广场 >

会话列表

[编程题]会话列表
  • 热度指数:9822 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

小云正在参与开发一个即时聊天工具,他负责其中的会话列表部分。

会话列表为显示为一个从上到下的多行控件,其中每一行表示一个会话,每一个会话都可以以一个唯一正整数id表示。

当用户在一个会话中发送或接收信息时,如果该会话已经在会话列表中,则会从原来的位置移到列表的最上方;如果没有在会话列表中,则在会话列表最上方插入该会话。

小云在现在要做的工作是测试,他会先把会话列表清空等待接收信息。当接收完大量来自不同会话的信息后,就输出当前的会话列表,以检查其中是否有bug。

输入描述:
输入的第一行为一个正整数T(T<=10),表示测试数据组数。
接下来有T组数据。每组数据的第一行为一个正整数N(1<=N<=200),表示接收到信息的次数。第二行为N个正整数,按时间从先到后的顺序表示接收到信息的会话id。会话id不大于1000000000。


输出描述:
对于每一组数据,输出一行,按会话列表从上到下的顺序,输出会话id。
相邻的会话id以一个空格分隔,行末没有空格。
示例1

输入

3
5
1 2 3 4 5
6
1 100 1000 1000 100 1
7
1 6 3 3 1 8 1

输出

5 4 3 2 1
1 100 1000
1 8 3 6

Java    利用LinkedHashSet和反向迭代器

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int T = in.nextInt();
        for (int i = 0; i < T; i++) {
            int N = in.nextInt();
            LinkedHashSet<Integer> lset = new LinkedHashSet<>();
            for (int j = 0; j < N; j++) {
                int key = in.nextInt();
                lset.remove(key);
                lset.add(key);
            }
            StringBuilder sb = new StringBuilder();
            ListIterator<Integer> it = new ArrayList<Integer>(lset).listIterator(lset.size());
            while(it.hasPrevious()){
                sb.append(it.previous());
                sb.append(' ');
            }
            sb.deleteCharAt(sb.length()-1);
            System.out.println(sb.toString());
        }
    }
}
编辑于 2020-04-24 11:36:46 回复(0)
import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;

/**
 * @author yanglaiyi
 * @title: 会话列表
 * @projectName 牛课刷题之栈
 * @description: TODO
 * @date 2020/4/15 10:31
 */
public class 会话列表 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int anInt = sc.nextInt();//读取输入的组数

        while (anInt > 0) {
            anInt--;
            int length = sc.nextInt();//读取输入的长度,即数组长度
            int[] a = new int[length];
            for (int i = 0; i < length; i++) {//输入数组
                a[i] = sc.nextInt();
            }

            Deque<Integer> dq = new LinkedList<Integer>();
            for (int i = 0; i < a.length; i++) {
                if (dq.contains(a[i])) {
                    dq.remove(a[i]);
                    dq.addFirst(a[i]);
                } else dq.addFirst(a[i]);
            }
            for (Integer i : dq) {
                System.out.print(i + " ");
            }
            System.out.println();
            dq.clear();
        }


    }


}利用队列操作
编辑于 2020-04-15 10:55:55 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            for(int i = 0; i<n; i++){ 
                Stack<Integer> stack = new Stack<>();
                int number = sc.nextInt();
                for(int j = 0; j<number; j++){
                    stack.push(sc.nextInt());
                }
                Set<Integer> set = new LinkedHashSet<>();//使用LinkedHashSet能保证不重复且在set中的顺序与存入顺序一致
                while(!stack.isEmpty()){
                    set.add(stack.pop());
                }
                for(int next : set){
                    System.out.print(next+" ");
                }
                System.out.println();
            }
        }
    }
}

发表于 2020-01-20 17:11:06 回复(0)
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;

public class Main {

    public static void main(String[] args) {
        int n;
        List<Integer> a = new ArrayList<>();
        Scanner cin = new Scanner(System.in);
        n = cin.nextInt();
        int m = 0;
        while (n-- > 0) {
            a.clear();
            m = cin.nextInt();
            int arr[] = new int[m];
            for (int i = 0; i < m; i++) {
                arr[i] = cin.nextInt();
            }
            boolean flag = false;
            for (int i = m - 1; i >= 0; --i) {
                if (!a.contains(arr[i])) {
                    if (flag) {
                        System.out.print(" ");
                    } else {
                        flag = true;
                    }
                    a.add(arr[i]);
                    System.out.print(arr[i]);
                }
            }
            System.out.println();

        }

    }
}

发表于 2019-10-04 19:24:34 回复(0)
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int t = scanner.nextInt();
        for (int i = 0; i < t; i++) {
            int n = scanner.nextInt();
            String[] id = new String[n];
            for (int j = 0; j < n; j++) {
                id[j] = scanner.next();
            }
            ArrayList<String> list = new ArrayList<>();
            for (int j = id.length - 1; j >= 0; j--) {
                if (!list.contains(id[j])) {
                    list.add(id[j]);
                }
            }
            StringBuilder sb = new StringBuilder();
            for (String str : list) {
                sb.append(str + " ");
            }
            System.out.println(sb.toString().trim());
        }
    }
}
发表于 2019-07-12 10:45:16 回复(0)