题解 | 【模板】多重集合操作

【模板】多重集合操作

https://www.nowcoder.com/practice/aaf8b53f6ea74ad6beabed77bb275725

import java.util.*;

public class Main {
    static Map<Integer, Integer> elementMap = new HashMap<>();
    static TreeSet<Integer> elementSet = new TreeSet<>();
    static int addCount = 0;
    static int deleteCount = 0;
    public static void insertValue(int x) {
        // TODO: 实现插入逻辑
        addCount++;
        if (elementMap.containsKey(x)) {
            elementMap.put(x, elementMap.get(x) + 1);
            return;
        }
        elementMap.put(x, 1);
        elementSet.add(x);
    }

    public static void eraseValue(int x) {
        // TODO: 实现删除逻辑
        if (elementMap.containsKey(x)) {
            deleteCount++;
            int count = elementMap.get(x);
            if(count == 1) {
                elementMap.remove(x);
                elementSet.remove(x);
                return;
            }
            elementMap.put(x,  count - 1);
        }
    }

    public static int xCount(int x) {
        if (elementMap.containsKey(x)) {
            return elementMap.get(x);
        }
        return 0; 
    }

    public static int sizeOfSet() {
        // TODO: 返回集合大小
        return addCount - deleteCount;
    }

    public static int getPre(int x) {
        // TODO: 实现找前驱
        Integer pre = elementSet.lower(x);
        if(pre == null) {
            pre = -1;
        }
        return pre;
    }

    public static int getBack(int x) {
        // TODO: 实现找后驱
        Integer back = elementSet.higher(x);
        if(back == null) {
            back = -1;
        }
        return back;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int q = scanner.nextInt();
        while (q-- > 0) {
            int op = scanner.nextInt();
            switch (op) {
                case 1:
                    insertValue(scanner.nextInt());
                    break;
                case 2:
                    eraseValue(scanner.nextInt());
                    break;
                case 3:
                    System.out.println(xCount(scanner.nextInt()));
                    break;
                case 4:
                    System.out.println(sizeOfSet());
                    break;
                case 5:
                    System.out.println(getPre(scanner.nextInt()));
                    break;
                case 6:
                    System.out.println(getBack(scanner.nextInt()));
                    break;
            }
        }
        scanner.close();
    }
}

全部评论

相关推荐

嵌入式的小白:你这配置这么好的啊,我要是有那个长的屏就好了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务