LeetCode 677. 键值映射

作者: TheKey_ | 来源:发表于2019-08-18 16:07 被阅读0次

677. 键值映射

实现一个 MapSum 类里的两个方法,insert 和 sum。

对于方法 insert,你将得到一对(字符串,整数)的键值
对。字符串表示键,整数表示值。如果键已经存在,那么原来的键值对将被替代成新的键值对。

对于方法 sum,你将得到一个表示前缀的字符串,你需要返回所有以该前缀开头的键的值的总和。

示例:
输入: insert("apple", 3), 输出: Null
输入: sum("ap"), 输出: 3
输入: insert("app", 2), 输出: Null
输入: sum("ap"), 输出: 5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/map-sum-pairs/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


  • Trie实现

思路:可参考 LeetCode 208. 实现 Trie (前缀树) - 简书

private class Node {
        private int value;
        private TreeMap<Character, Node> next;

        public Node(int value) {
            this.value = value;
            next = new TreeMap<>();
        }

        public Node() {
            this(0);
        }
    }

    private Node root;
    /** Initialize your data structure here. */
    public MapSum() {
        root = new Node();
    }

    /**
     * 添加元素
     *
     * 时间复杂度:O(n), 字符串的长度
     * 空间复杂度:O(n), 最坏情况下没有公共节点,需要添加 n 个节点
     *
     * @param key
     * @param val
     */
    public void insert(String key, int val) {
        Node cur = root;
        for (int i = 0; i < key.length(); i++) {
            char c = key.charAt(i);
            if (cur.next.get(c) == null) {
                cur.next.put(c, new Node());
            }
            cur = cur.next.get(c);
        }
        cur.value = val;
    }

    /**
     * 时间复杂度:O(n)
     * 空间复杂度:O(n)
     * @param prefix
     * @return
     */
    public int sum(String prefix) {
        Node cur = root;
        for (int i = 0; i < prefix.length(); i++) {
            char c = prefix.charAt(i);
            if (cur.next.get(c) == null) return 0;
            cur = cur.next.get(c);
        }
        return sum(cur);
    }

    /**
     * 递归
     *
     *
     *
     * @param node
     * @return
     */
    private int sum(Node node) {
//        if (node.next.size() == 0) return node.value;
        int res = node.value;
        //遍历当前节点的所有子节点
        for (char c : node.next.keySet()) {
            res += sum(node.next.get(c));
        }
        return res;
    }

  • 源码

  • 我会每天更新新的算法,并尽可能尝试不同解法,如果发现问题请指正
  • Github

相关文章

  • LeetCode 677. 键值映射

    677. 键值映射 实现一个 MapSum 类里的两个方法,insert 和 sum。 对于方法 insert,你...

  • 677. 键值映射

    实现一个 MapSum 类里的两个方法,insert 和 sum。对于方法 insert,你将得到一对(字符串,整...

  • 677. 键值映射(Python)

    题目 难度:★★★☆☆类型:字符串方法:前缀树 力扣链接请移步本题传送门[https://leetcode-cn....

  • 键值映射

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/map-su...

  • LeetCode 查找表专题 5:灵活选择键值:4Sum II

    LeetCode 查找表专题 5:灵活选择键值:4Sum II 例1:LeetCode 第 454 题:四数相加 ...

  • python字典类型

    映射是一种键(索引)和值(数据)的一一对应关系,字典是映射关系的体现 定义:字典是键值对的集合,键值对在字典中是无...

  • Sass 映射函数

    本节我们来看一下 Sass 中的映射函数,Sass 中的映射是由键值对(key/value)组成。映射是不可变的,...

  • python 实现 map 的分词

    Map 的作用,即数据的映射,用于把一组键值对映射成另一组新的键值对。白话就是对数据按照一定的格式进行归整。举个例...

  • 数据结构之集合与映射(二)

    本篇主要内容:映射Map及其实现,Map的应用,Map与Set的对比 映射Map 数据结构里的所谓映射是键值对的数...

  • Java集合框架(七)—Map

    Map Map 是一个键值对(key-value)映射接口。Map映射中不能包含重复的键;每个键最多只能映射到一个...

网友评论

    本文标题:LeetCode 677. 键值映射

    本文链接:https://www.haomeiwen.com/subject/cknrsctx.html