什么是LRU缓存?
LRU缓存(Least Recently Used)是一种常用的缓存淘汰算法,它根据数据的使用时间来决定哪些数据需要被移除。这种算法假设最近使用的数据会在未来一段时间内继续被使用,而很久没有使用的数据则可能在未来很长时间内不会被使用。
实现
LRU淘汰机制的基本原理是,当缓存已满,需要插入新的数据时,它会选择最近最少使用的数据进行移除,从...
背包问题
对于背包问题,我们需要使用动态规划的思想来解决问题。
例如一个问题, 选择n个物品重量w不超过n的最大价值v
首先是集合表示,可以表示为前 i 个物品 不超过 j 的重量的集合
集合的属性:最大/最小值
状态的计算: 对于[i,j] 我们需要对此进行一个集合的划分
一般来说,取最后一部进行划分:
以01 背包为栗:每个物品 选择和不选 , 划分为...
给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] - nums[j]| == k 。
|x| 的值定义为:
如果 x >= 0 ,那么值为 x 。
如果 x < 0 ,那么值为 -x 。
1 <= nums.length,k <= 100000,数组中每...
题目
给你两个二维整数数组 items1 和 items2 ,表示两个物品集合。每个数组 items 有以下特质:
items[i] = [valuei, weighti] 其中 valuei 表示第 i 件物品的 价值 ,weighti 表示第 i 件物品的 重量 。
items 中每件物品的价值都是 唯一的 。
请你返回一个二维数组 ret,其中 ret...
题目
你将会得到一份单词表 words,一个字母表 letters (可能会有重复字母),以及每个字母对应的得分情况表 score。
请你帮忙计算玩家在单词拼写游戏中所能获得的「最高得分」:能够由 letters 里的字母拼写出的 任意 属于 words 单词子集中,分数最高的单词集合的得分。
单词拼写游戏的规则概述如下:
玩家需要用字母表 letter...
奶牛贝茜正在学习如何在不同进制之间转换数字。
但是她总是犯错误,因为她无法轻易的用两个前蹄握住笔。
每当贝茜将数字转换为一个新的进制并写下结果时,她总是将其中的某一位数字写错。
例如,如果她将数字 14 转换为二进制数,那么正确的结果应为 1110,但她可能会写下 0110 或 1111。
贝茜不会额外添加或删除数字,但是可能会由于写错数字的原因,写下包含前...
二分模板
将区间[l, r]被分为[l, mid]和[mid+1, r]时使用
int l=0,r=n-1;
while(l<r){
int mid=l+r>>1;
if(nums[mid]>=x){
r=mid;
}else{
l=mid+1;
}
}
2.将区间[l, r]被分为[l, mid-1]和[m...
在一个 3×3 的网格中,1∼8这 8 个数字和一个 x 恰好不重不漏地分布在这 3×3 的网格中。
例如:
1 2 3
x 4 6
7 5 8
在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。
我们的目的是通过交换,使得网格变为如下排列(称为正确排列):
1 2 3
4 5 6
7 8 x
例如,示例中图形就可以通过让 x ...
题目详情
给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。
示例 1:
输入:n = 2
输出:[0,1,1]
解释:
0 --> 0
1 -...