1339. Maximum Product of Splitted Binary Tree

解题思路:根据题目描述,找出删除一条边之后两棵二叉树的最大乘积。两棵二叉树的最大乘积应该是差值最小的两棵树,所以解题需要知道以每一个节点为根的二叉树的和,所以解题主要分三步: 更新树节点为以此节点为根的二叉树的节点和 找出差值最小的两棵二叉树的和 返回答案 时间复杂度:O(n) / 空间复杂度:O(1)

1338. Reduce Array Size to The Half

解题思路:题目要求是找出最少的元素,使得删除该元素之后的数组的数量顶多为原来的一半,用另外的一种解释就是删除出先次数最多的元素,使数组长度为原来的一半。 解题使用两个数据结构, 一个map,统计同一个元素出现的次数 一个priority_queue,依次找出出现次数最多的元素 时间复杂度:O(n) / 空间复杂度:O(n)

1331. Rank Transform of an Array

解题思路:本题求一个数组中各个元素的排序作,主要分为以下几步: 开辟另外一块内存对原数组排序,原数组在这一步保持不变 对排序好的数组依次遍历放入一个 unordered_map 中 遍历原数组,按值将索引作为值一次更新,然后返回 时间复杂度:O(nlogn) / 空间复杂度:O(n)

76. Minimum Window Substring

解题思路:leetcode的经典滑动窗口题目,也是面试高频题。给出了两个字符串S, T,找出在S中包含T的最小子串,顺序随意。 分配两个数组(长度为128,这是ASCII码的长度,因为题目并没有说都是字母) 一个保存字符串T的所有字符 一个保存字符串S中,当前滑动窗口中的所有字符 在对字符串S进行遍历的时候根据与T中的字符串进行比较做相应的处理: 如果当前滑动窗口中包含T中的所有字符 如果当前滑动窗口最小,则更新返回值 将rear指针前移并更新当前滑动窗口中的字符 如果当前滑动窗口不包含T中的所有字符,将front指针前移,更新窗口中的字符 时间复杂度:O(m + n) / 空间复杂度:O(1) 算法分配的空间固定

1007. Minimum Domino Rotations For Equal Row

解题思路:一道筛子的题目,要求使用最少的交换次数使得上下两个筛子的数字都相同,归纳起来是一道数组配合数据结构的题目。 主要使用三个map来存储相应的信息 两个数组的值分别对应的坐标集合 两个数组的相同的值对应的坐标,这个是不同的坐标 遍历两个数组,将值与下标索引存入三个map中,然后处理三个数组 如果一个值在两个数组中的下标索引与数组长度相同,则可以得到答案,如果没有这样的值则返回-1 注意,如果两个筛子的值可以通过变换变成一致那么只可能有一种答案。 时间复杂度:O(n) / 空间复杂度:O(1)

1325. Delete Leaves With a Given Value

解题思路:删除一个二叉树中值为target的叶节点,当一个节点删除左右孩子变成叶节点之后符合条件也要删除。这是一道典型的二叉树采用分治策略的题目,但是函数的构造使用的是递归的思路,主要分为三个部分: 第一部分为返回值 第二部分分别求当前节点的左右子树 第三部分判断该节点是否符合删除条件 时间复杂度:O(n) / 空间复杂度:O(1)