题解 | 【模板】集合操作

【模板】集合操作

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

知识点,TreeSet详情:

基于TreeMap红黑树实现(TreeSet内部使用TreeMap实现),元素有序,不可重复,操作时间复杂度O(logn)

导航和范围操作:TreeSet特有

TreeSet<Integer> nums = new TreeSet<>(Arrays.asList(10, 20, 30, 40, 50));

// 获取最小/最大元素
Integer first = nums.first(); // 10
Integer last = nums.last();   // 50

// 小于/小于等于某元素的最大元素
Integer lower = nums.lower(25);   // 20(<25)
Integer floor = nums.floor(25);   // 20(≤25)

// 大于/大于等于某元素的最小元素
Integer higher = nums.higher(25);  // 30(>25)
Integer ceiling = nums.ceiling(25); // 30(≥25)

// 移除并返回最小/最大元素
Integer pollFirst = nums.pollFirst(); // 移除并返回10
Integer pollLast = nums.pollLast();   // 移除并返回50

题解:

import java.util.*;


public class Main {
    // 为了在静态方法中使用,也是用静态变量,因为静态方法只能访问静态变量
    static TreeSet<Integer> ts = new TreeSet<>();
    public static void insertValue(int x) {
        // TODO: 实现插入逻辑
        // 直接使用TreeSet的add方法
        ts.add(x);
    }

    public static void eraseValue(int x) {
        // TODO: 实现删除逻辑
        ts.remove(x);
    }

    public static boolean xInSet(int x) {
        // TODO: 实现存在性检查
        return ts.contains(x);
    }

    public static int sizeOfSet() {
        // TODO: 返回集合大小
        return ts.size();
    }

    public static int getPre(int x) {
        // TODO: 实现找前驱
        // 前驱,小于x的最大的数,因此使用方法lower()
        // 判断前驱是否为null
        Integer pre = ts.lower(x);
        return pre != null ? pre : -1;
    }

    public static int getBack(int x) {
        // 找到后继,即为 大于x的最小的数
        Integer back = ts.higher(x);
        return back != null ? back : -1;
    }

    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(xInSet(scanner.nextInt()) ? "YES" : "NO");
                    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();
    }
}

#java#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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