题目核心
二叉树中的路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中至多出现一次。该路径至少包含一个节点,且不一定经过根节点。
路径和是路径中各节点值的总和。
给你一个二叉树的根节点 root,返回其最大路径和。
例如:
-10
/ \
9 20
/ \
15 7
最大路径和:15 + 20 + 7 = 42
路径是 15 → 20 → 7,把 20 当成"最高点"拐弯
二叉树中的路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中至多出现一次。该路径至少包含一个节点,且不一定经过根节点。
路径和是路径中各节点值的总和。
给你一个二叉树的根节点 root,返回其最大路径和。
例如:
-10
/ \
9 20
/ \
15 7
最大路径和:15 + 20 + 7 = 42
路径是 15 → 20 → 7,把 20 当成"最高点"拐弯
给定一个未排序的整数数组 nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
要求:设计并实现时间复杂度为 O(n) 的解法。
例如:
nums = [100, 4, 200, 1, 3, 2]
答案:4(最长连续序列是 [1, 2, 3, 4])
nums = [0, 3, 7, 2, 5, 8, 4, 6, 0, 1]
答案:9(最长连续序列是 [0, 1, 2, 3, 4, 5, 6, 7, 8])
给你一个非空整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
要求:算法应该具有线性时间复杂度,并且不使用额外空间。
例如:
nums = [2, 2, 1]
答案:1
nums = [4, 1, 2, 1, 2]
答案:4
nums = [1]
答案:1
给你一个字符串 s,请你统计并返回这个字符串中回文子串的数目。
例如:
s = "abc"
答案:3("a"、"b"、"c")
s = "aaa"
答案:6("a"×3、"aa"×2、"aaa"×1)
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s。
s 即可。例如:
s = "leetcode", wordDict = ["leet", "code"]
返回 true("leet" + "code")
s = "applepenapple", wordDict = ["apple", "pen"]
返回 true("apple" + "pen" + "apple")
s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
返回 false
给定一个链表的头节点 head,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达该节点,则链表中存在环。参数 pos 表示链表尾连接到链表中的位置(从 0 开始),仅用于标识,不会作为参数传递。
返回 true 表示有环,false 表示无环。
例 1:1 -> 2 -> 3 -> 4,尾连到 2(pos=1)
返回 true
例 2:1 -> 2,尾连到 0(pos=0)
返回 true
例 3:1 -> 2 -> 3 -> null
返回 false
给定一个链表的头节点 head,返回链表开始入环的第一个节点。如果链表无环,则返回 null。
注意:不允许修改链表。
这题是 141. 环形链表 的进阶版——141 只判断有没有环,142 要找出环的入口节点。
例 1:1 -> 2 -> 3 -> 4,尾连到 2(pos=1)
返回节点 2(入环点)
例 2:1 -> 2,尾连到 0(pos=0)
返回节点 1(入环点)
例 3:1 -> 2 -> null
返回 null
请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。
实现 LRUCache 类:
LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存。int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1。void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value;如果不存在,则向缓存中插入该组 key-value。如果插入操作导致关键字数量超过 capacity,则应该 逐出 最久未使用的关键字。设计一个支持 push、pop、top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack() 初始化堆栈对象。void push(int val) 将元素 val 推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int getMin() 获取堆栈中的最小元素。给定一个大小为 n 的数组 nums,返回其中出现次数 超过一半 的元素。
多数元素是指数组中出现次数大于 n/2 的元素。题目保证数组中一定存在多数元素。
例如:
nums = [3, 2, 3]
答案:3