Keshawn_lu's Blog

Keshawn_lu's Blog

Become a better myself.

Leetcode 44. 通配符匹配
题目简介:给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。 12'?' 可以匹配任何单个字符。'*' 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 * 示例 1: 12345输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 &quo...
Leetcode 32. 最长有效括号
题目简介:给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 123输入: "(()"输出: 2解释: 最长有效括号子串为 "()" 示例 2: 123输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()" 思路:利用动态规划的思想,dp[i]代表以s[i]为结尾的字符串的有效括号长度。 所以以(为结尾的是不会有有效括号长度的,dp[i] = 0。 以)为结尾的有两种情况 s[i] = ')' &...
Leetcode 108. 将有序数组转换为二叉搜索树
题目简介:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 12345678给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 思路:这题其实相当于给你一个中序遍历的序列,让你还原出二叉搜索树。 首先每次选择数组中间的点作为每个子树的根节点(保证左右子树的高度平衡)。 再递归构建左右子树即可。 tip: 注...
Leetcode 378. 有序矩阵中第K小的元素
题目简介:给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。 示例: 1234567matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15]],k = 8,返回 13。 提示:你可以假设 k 的值永远是有效的,1 ≤ k ≤ n2。 思路:利用二分查找,下界left为矩阵中数值最小的元素为左上角元素matrix[0][0],上界right为最大的元素,即右下角元素matrix[matrix.size() - 1][matrix.s...
Leetcode 718. 最长重复子数组
题目简介:给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。 示例 1: 123456输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出: 3解释: 长度最长的公共子数组是 [3, 2, 1]。 说明: 1 <= len(A), len(B) <= 1000 0 <= A[i], B[i] < 100 思路:使用动态规划的思想,d[i][j]代表以A[i]与B[j]为结尾的公共最长子序列。 当A[i] != B[j]时,dp[i][j] == 0 当A[i] == B[j]时,dp[i][j] == dp[i - 1]...
Leetcode 剑指 Offer 09. 用两个栈实现队列
题目简介:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 1234输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1] 示例 2: 1234输入:["CQueue","delet...
Leetcode 215. 数组中的第K个最大元素
题目简介:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 12输入: [3,2,1,5,6,4] 和 k = 2输出: 5 示例 2: 12输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4 说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。 思路:这题留着以后用堆排序做一遍,现在用快排两行代码解决。 代码如下:123456789class Solution {public: int findKthLargest(vector<int&g...
Leetcode 209. 长度最小的子数组
题目简介:给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。 示例: 123输入:s = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的连续子数组。 思路:设置双指针,起始均指向首元素,定义一个sum,表示子数组的累积和。 然后右指针开始向右移动,sum一直累加nums[right],直至sum >= s,此时左指针开始向右移动,sum依次减去nums[left],并每次保存sum >= s时的子数组长度,直至...
Leetcode 41. 缺失的第一个正数
题目简介:给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。 示例 1: 12输入: [1,2,0]输出: 3 示例 2: 12输入: [3,4,-1,1]输出: 2 示例 3: 12输入: [7,8,9,11,12]输出: 1 提示: 你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。 思路:由于时间复杂度为O(n),空间复杂度为O(1),所以不能使用简单的哈希表或排序等方法。 所以我们使用置换的方法,在遍历数组时,将nums[i]放置到nums[nums[i] - 1]的位置上,比如nums[i] = 3就放置到nums[2],即nums[2] = 3。 ...
Leetcode 面试题 02.01. 移除重复节点
题目简介:编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 示例1: 12输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3] 示例2: 12输入:[1, 1, 1, 1, 2]输出:[1, 2] 提示: 链表长度在[0, 20000]范围内。 链表元素在[0, 20000]范围内。 思路:首先先设置一个res = head来保存原始的head。 然后定义一个哈希表,遍历链表时若第一次遇到节点中的val,则存入哈希表; 否则,则一直删除节点,直至遇到不重复的节点,并把该节点的val存入哈希表。 最后返回一开始定义的res即可。 tip: 注意要将删除过程后...
avatar
鸣蜩十九
Always
友链
CSDN BiliBili