随笔分类 - oj记录
没事刷刷oj,总是会对自己有帮助的
摘要:Q:给定一棵二叉搜索树和其中的一个节点 node ,找到该节点在树中的中序后继。 如果节点没有中序后继,请返回 null 。 一个结点 node 的中序后继是键值比 node.val大所有的结点中键值最小的那个。 你可以直接访问结点,但无法直接访问树。每个节点都会有其父节点的引用。节点定义如下: c
阅读全文
摘要:Q:给你一个二叉搜索树和其中的某一个结点,请你找出该结点在树中顺序后继的节点。 结点 p 的后继是值比 p.val 大的结点中键值最小的结点。 示例 1: 输入: tree = [2,1,3], node = 1 输出: 2 解析: 1 的中序后继结点是 2 。注意节点和返回值都是 Node 类型的
阅读全文
摘要:Q: 统计所有小于非负整数 n 的质数的数量。 示例 1: 输入:n = 10 输出:4 解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 示例 2: 输入:n = 0 输出:0 示例 3: 输入:n = 1 输出:0 A: 如果我们在进行顺序遍历时,每取得一个数(排除0、
阅读全文
摘要:Q:给你一个区间列表,请你删除列表中被其他区间所覆盖的区间。 只有当 c ⇐ a 且 b ⇐ d 时,我们才认为区间 [a,b) 被区间 [c,d) 覆盖。 在完成所有删除操作后,请你返回列表中剩余区间的数目。 示例: 输入:intervals = [[1,4],[3,6],[2,8]] 输出:2
阅读全文
摘要:Q:设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构。 insert(val):当元素 val 不存在时,向集合中插入该项。 remove(val):元素 val 存在时,从集合中移除该项。 getRandom:随机返回现有集合中的一项。每个元素应该有相同的概率被返回。 示例 :
阅读全文
摘要:Q:给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二叉树,并且输出这个树的根节点。 示例 : 输入:[3,2,1
阅读全文
摘要:Q:给定一个字符串 S,计算 S 的不同非空子序列的个数。 因为结果可能很大,所以返回答案模 10^9 + 7. 示例 1: 输入:"abc" 输出:7 解释:7 个不同的子序列分别是 "a", "b", "c", "ab", "ac", "bc", 以及 "abc"。 示例 2: 输入:"aba"
阅读全文
摘要:Q:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 : 给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意:两结点之间的路径长度是以
阅读全文
摘要:Q:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 示例: 输入:nums = [-1,2,1,-4], target = 1 输出:2 解释:与 target
阅读全文
摘要:Q:给你一棵二叉搜索树(BST)、它的根结点 root 以及目标值 V。 请将该树按要求拆分为两个子树:其中一个子树结点的值都必须小于等于给定的目标值 V;另一个子树结点的值都必须大于目标值 V;树中并非一定要存在值为 V 的结点。 除此之外,树中大部分结构都需要保留,也就是说原始树中父节点 P 的
阅读全文
摘要:Q:给你一个整数数组 arr,每一次操作你都可以选择并删除它的一个 回文 子数组 arr[i], arr[i+1], ..., arr[j]( i ⇐ j)。 注意,每当你删除掉一个子数组,右侧元素都会自行向前移动填补空位。 请你计算并返回从数组中删除所有数字所需的最少操作次数。 示例 1: 输入:
阅读全文
摘要:Q:给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 'a','e','i','o','u' ,在子字符串中都恰好出现了偶数次。 示例 1: 输入:s = "eleetminicoworoep" 输出:13 解释:最长子字符串是 "leetminicowor" ,它包
阅读全文
摘要:Q:给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。 示例 1: 输入:"abc" 输出:3 解释:三个回文子串: "a", "b", "c" 示例 2: 输入:"aaa" 输出:6 解释:6个回文子串:
阅读全文
摘要:Q:给定一个数组 nums 和一个目标值 k,找到和等于 k 的最长子数组长度。如果不存在任意一个符合要求的子数组,则返回 0。 注意: nums 数组的总和是一定在 32 位有符号整数范围之内的。 示例 1: 输入: nums = [1, -1, 5, -2, 3], k = 3 输出: 4 解释
阅读全文
摘要:Q:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 ⇐100)。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符
阅读全文
摘要:Q:给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1, 使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否则返回 false 。 说明: 要求算法的
阅读全文
摘要:Q:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 示例 1: 输入: num1 = "2", num2 = "3" 输出: "6" 示例 2: 输入: num1 = "123", num2 = "456" 输出: "
阅读全文
摘要:Q:你总共需要上 n 门课,课程编号依次为 0 到 n-1 。 有的课会有直接的先修课程,比如如果想上课程 0 ,你必须先上课程 1 ,那么会以 [1,0] 数对的形式给出先修课程数对。 给你课程总数 n 和一个直接先修课程数对列表 prerequisite 和一个查询对列表 queries 。 对
阅读全文
摘要:Q:给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动将会使 n - 1 个元素增加 1。 示例: 输入: [1,2,3] 输出: 3 解释: 只需要3次移动(注意每次移动会增加两个元素的值): [1,2,3] ⇒ [2,3,3] ⇒ [3,4,3] ⇒ [4,4,4
阅读全文
摘要:Q:定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T。 示例 1: 输入: s = "eceba", k = 2 输出: 3 解释: 则 T 为 "ece",所以长度为 3。 示例 2: 输入: s = "aa", k = 1 输出: 2 解释: 则 T 为 "aa",所以长度为
阅读全文