1 | 请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。 |
1 | class WordDictionary { |
1 | 请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。 |
1 | class WordDictionary { |
难度:中等
在整数数组 nums
中,是否存在两个下标 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值小于等于 t ,且满足 i 和 j 的差的绝对值也小于等于 ķ 。
如果存在则返回 true
,不存在返回 false
。
示例 1:
1 | 输入: nums = [1,2,3,1], k = 3, t = 0 |
示例 2:
1 | 输入: nums = [1,0,1,1], k = 1, t = 2 |
示例 3:
1 | 输入: nums = [1,5,9,1,5,9], k = 2, t = 3 |
1 | public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) { |
解决这个问题需要找到一组满足以下条件的 $i$ 和 $j$:
我们把大于等于 $x$ 的最小的数 $s$ 当做 $x$ 在 BST 中的后继节点。同样的,我们能把小于等于 $x$ 最大的数 $g$ 当做 $x$ 在 BST 中的前继节点。$s$ 和 $g$ 这两个数是距离 $x$ 最近的数。因此只需要检查它们和 $x$ 的距离就能知道条件2是否满足了。
1 | class Solution{ |
时间复杂度:$O(n \log (\min(n,k)))$
我们需要遍历这个 $n$ 长度的数组。对于每次遍历,在 BST 中 搜索,插入
或者 删除
都需要花费 $O(\log \min(k, n))$ 的时间。
空间复杂度:$O(\min(n,k))$
空间复杂度由 BST 的大小决定,其大小的上限由 $k$ 和 $n$ 共同决定。
利用桶将数字分组,每个一数字 $x$ 要想找到与 $x$ 大小相邻(小于t)并且位置相邻(小于k)的元素,只需要判断相邻的桶中的元素的大小是否相邻(小于t)并且位置是否相邻(小于k)。通过使用桶减小了之间的距离
1 | public class Solution { |
1 | 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 |
1 | class Solution { |
1 | class Solution { |
1 | class Solution { |
1 | 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: |
1 | class Solution { |
1 | class Solution { |
1 | 在英语中,我们有一个叫做 词根(root)的概念,它可以跟着其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。例如,词根an,跟随着单词 other(其他),可以形成新的单词 another(另一个)。 |
java split 空格使用
1 | String[] words = sentence.split("\\s+"); |
1 | class Solution { |
1 | class Solution { |
1 | class Solution { |
1 | 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。 |
由于有冷冻期,前一天卖,后一天不能买入,所以在 $dp[i][0]$ 与没有冷冻期的股票问题相同:
$dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]+price[i])$
而 $dp[i][1]$ 需要在 $dp[i-2][0]$ 等待一天才能买入,所以:
$dp[i][1]=Math.max(dp[i-1][1],dp[i-2][0]-price[i])$
1 | class Solution { |
1 | class Solution { |
1 | 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注意下标从 0 开始编号)。你每次可以往 上,下,左,右 四个方向之一移动,你想要找到耗费 体力 最小的一条路径。 |
1 | class Solution { |
1 | class Solution { |
1 | class Solution { |
难度: 困难
有 n
个气球,编号为0
到 n - 1
,每个气球上都标有一个数字,这些数字存在数组 nums
中。
现在要求你戳破所有的气球。戳破第 i
个气球,你可以获得 nums[i - 1] * nums[i] * nums[i + 1]
枚硬币。 这里的 i - 1
和 i + 1
代表和 i
相邻的两个气球的序号。如果 i - 1
或 i + 1
超出了数组的边界,那么就当它是一个数字为 1
的气球。
求所能获得硬币的最大数量。
示例 1:
1 | 输入:nums = [3,1,5,8] |
示例 2:
1 | 输入:nums = [1,5] |
提示:
n == nums.length
1 <= n <= 500
0 <= nums[i] <= 100
直接戳破气球会导致区间中间的元素不好处理,使用逆向思维,在区间中添加气球。
我们定义方法 $\textit{solve}$,令 $\textit{solve}(i,j)$ 表示将开区间 $(i,j)$ 内的位置全部填满气球能够得到的最多硬币数。由于是开区间,因此区间两端的气球的编号就是 $i$ 和 $j$,对应着 $\textit{val}[i]$ 和 $\textit{val}[j]$。
当 $i \geq j-1$ 时,开区间中没有气球,$\textit{solve}(i,j)$ 的值为 $0$;
当 $i < j-1$ 时,我们枚举开区间 $(i,j)$ 内的全部位置 $\textit{mid}$,令 $\textit{mid}$ 为当前区间第一个添加的气球,该操作能得到的硬币数为 $val[i]×val[mid]×val[j]$。
同时我们递归地计算分割出的两区间对 $\textit{solve}(i,j)$ 的贡献,这三项之和的最大值,即为 $\textit{solve}(i,j)$ 的值。这样问题就转化为求 $\textit{solve}(i,\textit{mid})$ 和 $\textit{solve}(\textit{mid},j)$ ,可以写出方程:
$\textit{solve}(i,j)= \begin{cases}{} \displaystyle \max_{\textit{mid} = i + 1}^{j - 1}val[i] \times \textit{val}[\textit{mid}] \times \textit{val}[j] + \textit{solve}(i, \textit{mid}) + \textit{solve}(\textit{mid}, j) ,&i < j - 1 \ 0, & i \geq j - 1 \end{cases}$
1 | 作者:LeetCode-Solution |
1 | class Solution { |
1 | class Solution { |
1 | 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词。 |
1 | class Solution { |
1 | class TrieNode { |
难度中等1096
给定不同面额的硬币 coins
和一个总金额 amount
。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1
。
你可以认为每种硬币的数量是无限的。
示例 1:
1 | 输入:coins = [1, 2, 5], amount = 11 |
示例 2:
1 | 输入:coins = [2], amount = 3 |
示例 3:
1 | 输入:coins = [1], amount = 0 |
示例 4:
1 | 输入:coins = [1], amount = 1 |
示例 5:
1 | 输入:coins = [1], amount = 2 |
提示:
1 <= coins.length <= 12
1 <= coins[i] <= 231 - 1
0 <= amount <= 104
$F(i)=\min_{j=0 \ldots n-1} F(i-c j)+1$
背包容量是金额,coins是物品,选择是否放当前的硬币
遍历背包的容量:
对于每一件物品:
如果物品可以放入当前的容量中,就计算放入背包的收益和不放入背包的收益哪个大
不放物品是dp[i]
,放物品是dp[i-coins[j]]+1
(其中i-coins[j]
是剩余的背包容量)
1 | public class Solution { |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true