摘要:
原题(Medium): 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。 获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。 写入数据 put(k 阅读全文
摘要:
原题(Medium): 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。 思路: 首先要考虑的 阅读全文
摘要:
原题(Medium): 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 思路:动态规划 这题有个陷阱,需要特别注意,就是非空字符串s的字母 阅读全文
摘要:
原题(Medium): 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 思路: 前序遍历,其数组的分布应为[根结点,左子树结点,右子树结点]。 中序遍历,其数组分布应为[左子树结点,根结点,右子树结点]。 那么,从前序遍历数组出发,第一个元素即为根结点的值,在中序 阅读全文
摘要:
原题(Medium): 给定一个二叉树,原地将它展开为链表。 根据题意,原地展开的意思是,按照中序遍历的顺序(中左右)把二叉树的结点逐一放到树的右节点上。 思路: 我们已经知道,展开为链表后各节点顺序就是二叉树中序遍历的顺序,那么于一个节点而言,展开后,原本在其左子树节点肯定在原本其右子树的前面,例 阅读全文
摘要:
本节要学的容器就是我们日常开发中使用最多的vector,vector的数据安排以及操作方式,与array非常相似。两者唯一的区别在于空间运用的灵活性。array是静态空间,配置了其大小就不能被改变,如果空间满了,要换大的,这只能自己手动来:配置新空间,将元素从旧址一一复制过去,再把原来的空间释放。而vector是动态空间,随着元素的加入,它内部会自行扩充空间,进行元素的复制并释放旧空间。所以在使用上,我们更趋向于使用vector而非array,因为不用考虑元素个数的问题,很适合动态元素个数的情况。我们不必因为害怕空间不足而一开始就要求一个大块头的array了。 阅读全文