leetcode
ellieokokok
it
展开
-
寻找右区间
文章目录暴力哈希+排序排序 + 二分查找使用二分搜索树注给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的“右侧”。对于任何区间,你需要存储的满足条件的区间 j 的最小索引,这意味着区间 j 有最小的起始点可以使其成为“右侧”区间。如果区间 j 不存在,则将区间 i 存储为 -1。最后,你需要输出一个值为存储的区间值的数...原创 2020-03-18 19:28:48 · 186 阅读 · 0 评论 -
动态规划之⼦序列问题解题模板
⼦序列问题是不连续的序列,⽽子串,数组是连续的⼀般来说,⼦序列问题都是让你求⼀个最⻓⼦序列,因为最短⼦序列就是⼀个字符嘛,没啥可问的。⼀旦涉及到⼦序列和最值,那⼏乎可以肯定,考察的是动态规划技巧,时间复杂度⼀般都是 O(n^2)定义 dp 数组,找状态转移关系。我们说的两种思路模板,就是 dp 数组的定义思路。1、第⼀种思路模板是⼀个⼀维的 dp 数组:「最⻓递增⼦序列」,在这个思路中 ...原创 2020-03-16 15:38:30 · 482 阅读 · 0 评论 -
最长公共子序列
文章目录注最⻓公共⼦序列(Longest Common Subsequence,简称 LCS)状态:两个指针i,j 从后往前遍历s1和s2dp数组:dp(i,j)或者dp[ i ][ j ]:对于s1[1…i]和s2[1…j],它们的LCS长度选择:设s1和s2的最长公共子序列为lcs。那么对于s1和s2中的每个字符,要么在lcs中,要么不在⽤两个指针 i 和 j 从后往前遍历...原创 2020-03-16 09:32:19 · 131 阅读 · 0 评论 -
最⻓回⽂⼦序列
给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。示例 1:输入:"bbbab"输出:4一个可能的最长回文子序列为 "bbbb"。示例 2:输入:"cbbd"输出:2一个可能的最长回文子序列为 "bb"。动态规划状态:指针i, j从字符串的左右两端开始dp 数组的定义:在⼦串 s[i…j] 中,最⻓回⽂⼦序列的⻓度为 dp[i][j]选择...原创 2020-03-16 15:36:55 · 612 阅读 · 1 评论 -
最长回文子串
文章目录双指针双指针回⽂串就是正着读和反着读都⼀样的字符串回⽂串的⻓度可能是奇数也可能是偶数原创 2020-03-16 12:43:25 · 246 阅读 · 0 评论 -
编辑距离
文章目录暴力递归动态规划注给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入: word1 = "horse", word2 = "ros"输出: 3解释: horse -> rorse (将 'h' 替换为 'r')rorse -...原创 2020-03-15 12:10:13 · 117 阅读 · 0 评论 -
最长上升序列
文章目录动态规划二分查找给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。动态规划明确【状态】- 变量和变量范围:nums数组中不同位置上的数字,对应不同状态定义dp[...原创 2020-03-14 23:46:30 · 212 阅读 · 0 评论 -
零钱兑换-动态规划vs暴力递归
文章目录暴力递归动态规划总结注给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3...原创 2020-03-14 23:01:14 · 872 阅读 · 2 评论 -
最小路径和
文章目录暴力递归动态规划注给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。暴力递归假设在位置(i,j)到右下角的路径和为dp [i, j]。在(i...原创 2020-03-14 20:08:49 · 130 阅读 · 0 评论 -
LRU缓存机制
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数...转载 2020-03-11 13:12:52 · 148 阅读 · 0 评论 -
二分查找 --三种场景
文章目录二分查找寻找一个数寻找左侧边界寻找右侧边界注二分查找也称 折半查找(Binary Search)使用前提:线性表采用顺序存储结构,表中元素按关键字有序排列二分查找是一种基于比较目标值和数组中间元素的教科书式算法。如果目标值等于中间元素,则找到目标值。如果目标值较小,继续在左侧搜索。如果目标值较大,则继续在右侧搜索。寻找一个数实现:维护两个指针left,right,指针...原创 2020-03-13 18:55:50 · 680 阅读 · 0 评论 -
盛最多水的容器
示例:输入: [1,8,6,2,5,4,8,3,7]输出: 49如题意,垂直的两条线段将会与坐标轴构成一个矩形区域,较短线段的长度将会作为矩形区域的宽度,两线间距将会作为矩形区域的长度,而我们必须最大化该矩形区域的面积暴力破解解题思路简单考虑每队可能出现的线段组合,并找出这些情况之下的最大面积时间复杂度:O(n²),两个for循环空间复杂度:O(1)class Solution...转载 2020-03-06 11:24:58 · 146 阅读 · 0 评论 -
三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]本题返回数组中的数字,所以打...原创 2020-03-05 19:22:09 · 105 阅读 · 0 评论 -
两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]本来想排序,但是排序更...原创 2020-03-05 16:32:13 · 79 阅读 · 0 评论 -
面试题 10.01. 合并排序的数组
给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。初始化 A 和 B 的元素数量分别为 m 和 n。示例:输入:A = [1,2,3,0,0,0], m = 3B = [2,5,6], n = 3输出: [1,2,2,3,5,6]【类似归并排序的后半步,两个有序数组的合并问题】暴力解解题思路将数组...原创 2020-03-03 18:34:51 · 110 阅读 · 0 评论