Keshawn_lu's Blog

Keshawn_lu's Blog

Become a better myself.

Leetcode 530. 二叉搜索树的最小绝对差
题目简介:给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。 示例: 12345678910111213输入: 1 \ 3 / 2 输出:1解释:最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。 提示: 树中至少有 2 个节点。 思路:由于是二叉搜索树,所以其中序遍历必是一个升序序列。 所以我们定义一个pre来保存root的中序遍历前驱结点,在遍历过程中依次相减,并保存最小值,最后返回即可。 代码如下:123456789101112131415161718192021222324252627...
Leetcode 416. 分割等和子集
题目简介:给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 12345输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11]. 示例 2: 12345输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集. 思路:我们记所有元素的和为sum,由于sum为奇数时,无法分成两个相同的和,所以直接返回false。 当sum为偶数时,我们需要知道是否能找到一种选数字的方案,使其和...
Leetcode 142. 环形链表 II
题目简介:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。 示例 1: 123输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。 进阶:你是否可以不用额外空间解决此题? 思路:在昨天的题目上进行修改,这回需要找的是入环点。 我们可以根据上图进行数学公式的推导: 设链...
Leetcode 141. 环形链表
题目简介:给定一个链表,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 如果链表中存在环,则返回 true 。 否则,返回 false 。 进阶: 你能用 O(1)(即,常量)内存解决此问题吗? 示例 1: 123输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个...
Leetcode 344. 反转字符串
题目简介:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。 示例 1: 12输入:["h","e","l","l","o"]输出:["o","l","l","e","h"] 示例 2:...
Leetcode 75. 颜色分类
题目简介:给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意:不能使用代码库中的排序函数来解决这道题。 示例: 12输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2] 进阶: 一个直观的解决方案是使用计数排序的两趟扫描算法。 首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。 你能想出一个仅使用常数空间的一趟扫描算法吗? 思路:这题实际上就是排个序,由于只有三种颜色,我们可以先忽略...
Leetcode 18. 四数之和
题目简介:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,**b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 示例: 12345678给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2]] 思路:一开始想着回溯算法,可惜一直超时,于是放弃这个方法。 看了题解...
Leetcode 1. 两数之和
题目简介:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 1234给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1] 思路:利用哈希表,每次遍历到一个元素时,首先判断target - nums[i]是否已经在哈希表中了,如果在,则将两个下标存入结果数组中然后返回即可;如果不在,则将nums[i]存入哈希表。 时间复杂度O(n)...
Leetcode 771. 宝石与石头
题目简介:给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。 J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。 示例 1: 12输入: J = "aA", S = "aAAbbbb"输出: 3 示例 2: 12输入: J = "z", S = "ZZ"输出: 0 注意: S 和 J 最多含有50个字母。 J 中的字符...
Leetcode LCP 19. 秋叶收藏集
题目简介:小扣出去秋游,途中收集了一些红叶和黄叶,他利用这些叶子初步整理了一份秋叶收藏集 leaves, 字符串 leaves 仅包含小写字符 r 和 y, 其中字符 r 表示一片红叶,字符 y 表示一片黄叶。 出于美观整齐的考虑,小扣想要将收藏集中树叶的排列调整成「红、黄、红」三部分。每部分树叶数量可以不相等,但均需大于等于 1。每次调整操作,小扣可以将一片红叶替换成黄叶或者将一片黄叶替换成红叶。请问小扣最少需要多少次调整操作才能将秋叶收藏集调整完毕。 示例 1: 输入:leaves = "rrryyyrryyyrr" 输出:2 解释:调整两次,将中间的两片红叶替...
avatar
鸣蜩十九
Always
友链
CSDN BiliBili