自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1099)
  • 资源 (2)
  • 论坛 (1)
  • 收藏
  • 关注

原创 力扣 5770. 反转表达式值的最少操作次数 中缀表达式计算 树形dp

https://leetcode-cn.com/problems/minimum-cost-to-change-the-final-value-of-expression/思路:表达式问题做少了……看到给定的输入,显然是一个中缀表达式。如果显示建立出一棵对应的树,并用dp[i][j]dp[i][j]dp[i][j]表示把节点iii及其子树所代表的表达式的值修改为jjj所需要的最少操作次数,那么这就是一个树形dpdpdp问题。中缀表达式的性质在此不多赘述,假设已知两个节点a、ba、ba、b,那么当操作符号

2021-06-13 16:30:14 13

原创 力扣 1449. 数位成本和为目标值的最大数字 dp 贪心

https://leetcode-cn.com/problems/form-largest-integer-with-digits-that-add-up-to-target/思路一:依旧是完全背包的变种……只不过这道题要求恰好装满背包,那么在初始化的时候只初始化dp0dp_0dp0​为空,其余的初始化为−∞-\infin−∞即可。但是此题需要比较的元素是字符串而不是整数,而且字符串的比较方式也有所区别:首先判断长度关系,然后逐字符判断。如果简单的认为dpdpdp数组每个元素都是字符串,然后按照如下方程

2021-06-12 02:46:22 418 1

原创 力扣 279. 完全平方数 dp

https://leetcode-cn.com/problems/perfect-squares/思路:做法挺多的,就说一下dp吧。类似于完全背包的做法,只不过现在是求最小个数。用dpidp_idpi​表示表示正整数iii所需要的最少个数,那么对于每个满足题意的完全平方数xxx,有:dpi=min(dpi,dpi−x+1)dp_i=min(dp_i,dp_{i-x}+1)dpi​=min(dpi​,dpi−x​+1)class Solution {public: int numSqua

2021-06-11 00:54:29 9

原创 力扣 518. 零钱兑换 II dp

https://leetcode-cn.com/problems/coin-change-2/思路:经典完全背包问题……class Solution {public: int change(int amount, vector<int>& coins) { vector<int> dp(amount+1); dp[0]=1; for(const int &coin:coins) {

2021-06-10 17:04:10 8

原创 力扣 1049. 最后一块石头的重量 II dp

https://leetcode-cn.com/problems/last-stone-weight-ii/思路:考虑dpi,jdp_{i,j}dpi,j​表示处理前iii个石块后剩余石块重量总和为jjj的状态是否存在。那么对于dpi−1,jdp_{i-1,j}dpi−1,j​,我们可以把第iii块石头加进来但不做任何处理,也可以粉碎第iii块石头(这取决于stonesistones_istonesi​和jjj的大小),因此有转移方程:dpi,j+stonesi=dpi−1,jdpi,abs(j−st

2021-06-10 16:51:49 19

原创 力扣 879. 盈利计划 dp

https://leetcode-cn.com/problems/profitable-schemes/思路:依旧和01背包问题很像,考虑用dpi,j,kdp_{i,j,k}dpi,j,k​表示前iii种工作使用了jjj名员工且利润为kkk的方案数,在不考虑取模的情况下,如果当前的j、kj、kj、k不满足第iii种工作的限制,那么有:dpi,j,k=dpi−1,j,kdp_{i,j,k}=dp_{i-1,j,k}dpi,j,k​=dpi−1,j,k​否则有:dpi,j,k=dpi−1,j,k+

2021-06-10 00:35:04 31

原创 力扣 1787. 使所有区间的异或结果为零 dp 位运算

https://leetcode-cn.com/problems/make-the-xor-of-all-segments-equal-to-zero/思路:依据题意,有:nums[i] xor nums[i+1]……xor nums[i+k−1]=0   (1)nums[i+1] xor nums[i+2]……xor nums[i+k]=0   (2)nums[i]\ xor\

2021-06-07 22:41:25 15

原创 力扣 1074. 元素和为目标值的子矩阵数量 哈希 枚举

https://leetcode-cn.com/problems/number-of-submatrices-that-sum-to-target/思路:考虑枚举左右边界l、rl、rl、r,计算该区间内每一行元素的和,可以得到一个数组sumsumsum,如果可以找到两个位置i、ji、ji、j满足∑k=ijsumk=target\sum_{k=i}^{j}sum_k=target∑k=ij​sumk​=target,那么就找到了一组可行解,其左上角坐标为(l,i)(l,i)(l,i),右下角坐标为(r,j

2021-06-07 18:14:23 11

原创 力扣 494. 目标和 爆搜 dp

https://leetcode-cn.com/problems/target-sum/思路一:爆搜出奇迹。class Solution {public: int findTargetSumWays(vector<int>& nums, int target) { return dfs(nums,0,target); } int dfs(const vector<int>&nums, int idx,int targe

2021-06-07 16:18:07 11

原创 力扣 477. 汉明距离总和 位运算

https://leetcode-cn.com/problems/total-hamming-distance/思路:分开计算二进制每一位的贡献即可,有两种方法,第一种方法先计算二进制每一位上1的个数,然后再遍历数组统计:class Solution {public: int totalHammingDistance(vector<int>& nums) { int cnt[31]={0}; for(const int& ele:n

2021-06-07 15:08:26 10

原创 力扣 461. 汉明距离 位运算 分治

https://leetcode-cn.com/problems/hamming-distance/思路:相当于统计x⨁yx\bigoplus yx⨁y结果中1的数量。那么可以使用内置函数计算:class Solution {public: int hammingDistance(int x, int y) { return __builtin_popcount(x^y); }};或者使用位运算计算,其中x&(x−1)x\&(x-1)x&

2021-06-07 14:45:38 10

原创 力扣 664. 奇怪的打印机 区间dp

https://leetcode-cn.com/problems/strange-printer/思路:dp还是不太熟悉呀……考虑用dpi,jdp_{i,j}dpi,j​表示打印区间[i,j][i,j][i,j]所需要的最少次数,那么显然dpi,i=1dp_{i,i}=1dpi,i​=1,对于区间[i,j][i,j][i,j],枚举断点kkk,有dpi,j=min(dpi,k+dpk+1,j)dp_{i,j}=min(dp_{i,k}+dp_{k+1,j})dpi,j​=min(dpi,k​+dpk+1

2021-06-07 02:34:21 190

原创 力扣 1707. 与数组中元素的最大异或值 01字典树 贪心

https://leetcode-cn.com/problems/maximum-xor-with-an-element-from-array/思路:01字典树,只不过多了一个最大值限制。那么在字典树的每个节点中记录一下到当前位置的最小值,如果该最小值满足限制,那么就可以走到该节点,否则不行。class Tire{public: vector<Tire*> child; int min_value; Tire():min_value(0x3f3f3f3f)

2021-06-06 21:22:57 7

原创 力扣 5778. 使二进制字符串字符交替的最少反转次数 思维 规律

https://leetcode-cn.com/problems/minimum-number-of-flips-to-make-the-binary-string-alternating/思路:dpdpdp的做法可以看官方题解……这边说一下我的思路,感觉想的有点歪。首先可以认为原始字符串由若干个交替字符串拼接而成,那么我们先找到这些交替字符串,然后把所有奇数或者所有偶数位置的交替字符串全部翻转,即可把它们全部拼接起来。因此最少操作要么在奇数位置产生,要么在偶数位置产生。但是这样我们只使用了操作2,没有

2021-06-06 17:21:32 8

原创 力扣 474. 一和零 dp(二维01背包)

https://leetcode-cn.com/problems/ones-and-zeroes/思路:太久没写背包了,都有点忘了……把每个字符串的0、1个数抽象为代价,m、n抽象为背包容量上限,显然就是二维01背包问题,做法和一维背包类似。class Solution {public: int findMaxForm(vector<string>& strs, int m, int n) { using pr=pair<int,int>;

2021-06-06 01:42:37 13

原创 力扣 525. 连续数组 哈希 前缀和 贪心

https://leetcode-cn.com/problems/contiguous-array/思路:其实和昨天那道题是差不多的……把数组中的0变为-1,那么问题转换为找总和为0的最长连续子数组。搞一个哈希表记录和到位置的映射:如果[0,i][0,i][0,i]的总和为jjj,那么可以令hash[j]=ihash[j]=ihash[j]=i。那么如果记录过jjj了,说明我们找到了一个合法区间,其长度为i−hash[j]i-hash[j]i−hash[j]。依据贪心思想,记录过的位置越靠前越好,因此只

2021-06-03 01:40:03 11

原创 力扣 1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗? 思维

https://leetcode-cn.com/problems/can-you-eat-your-favorite-candy-on-your-favorite-day/思路:对于第iii个询问,可以求出第favoriteTypeifavoriteType_ifavoriteTypei​类糖果的区间,然后根据每天最多吃的糖果数量和最少吃的糖果数量可以求出第favoriteDayifavoriteDay_ifavoriteDayi​天能吃的糖果数量区间,判断他们之间是否有交集即可。class Solu

2021-06-02 02:07:33 110

原创 力扣 1035. 不相交的线 dp

https://leetcode-cn.com/problems/uncrossed-lines/思路:两个要点,第一是连线对应位置的数相等,第二是线与线之间不相交,说明相对位置是一样的。那么其实这道题就是在求两个序列的最长公共子序列。class Solution {public: int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) { int n=nums1.si

2021-05-22 19:47:03 53

原创 力扣 692. 前K个高频单词 堆+哈希

https://leetcode-cn.com/problems/top-k-frequent-words/思路:先用哈希统计每个单词的出现次数,然后就是经典问题:求前kkk个最大/小元素。堆或者快排分割都行。class Solution {public: vector<string> topKFrequent(vector<string>& words, int k) { unordered_map<string,int> cnt

2021-05-20 20:01:02 14

原创 力扣 1442. 形成两个异或相等数组的三元组数目 异或 哈希

思路:设S0=0,Si=a0⨁a1⨁……⨁ai−1S_0=0,S_i=a_0\bigoplus a_1\bigoplus……\bigoplus a_{i-1}S0​=0,Si​=a0​⨁a1​⨁……⨁ai−1​,由异或性质可知,数组arrarrarr的[i,j−1][i,j-1][i,j−1]的异或和等于Sj⨁SiS_j \bigoplus S_iSj​⨁Si​,那么由题目的a=ba=ba=b可以化简得到Si=Sk+1S_i=S_{k+1}Si​=Sk+1​,此时jjj有k+1−ik+1-ik+1−i种选.

2021-05-18 21:07:13 11

原创 力扣 421. 数组中两个数的最大异或值 01字典树 贪心

https://leetcode-cn.com/problems/maximum-xor-of-two-numbers-in-an-array/思路:01字典树模板题……贪心就比较好想了,根据二进制的性质,显然要从高位枚举。class Tire{public: Tire() { root.resize(2,nullptr); } void insert(int num) { int val=1<<30;

2021-05-16 02:32:48 21

原创 力扣 12. 整数转罗马数字 贪心 模拟

https://leetcode-cn.com/problems/integer-to-roman/思路:经典贪心问题——求解找零钱的最小张数——的变体。直接模拟即可……class Solution {public: string intToRoman(int num) { map<int,string> mp={ {1000,"M"}, {900,"CM"}, {500,"D"},

2021-05-14 00:49:37 12

原创 力扣 1269. 停在原地的方案数 dp

https://leetcode-cn.com/problems/number-of-ways-to-stay-in-the-same-place-after-some-steps/思路:dpi,jdp_{i,j}dpi,j​表示经过iii步后到达jjj位置的方法数,显然 dp0,0=1dp_{0,0}=1dp0,0​=1,且有以下转移方程:dpi,j=dpi−1,j−1+dpi−1,j+dpi−1,j+1dp_{i,j}=dp_{i-1,j-1}+dp_{i-1,j}+dp_{i-1,j+1}d

2021-05-13 16:06:52 10

原创 力扣 1734. 解码异或后的排列 位运算(异或)

https://leetcode-cn.com/problems/decode-xored-permutation/思路:由于原序列是nnn个正整数的排列,且nnn为奇数,那么我们可以得到原序列的异或和v1=1⨁2⨁...nv_1=1 \bigoplus 2 \bigoplus ...nv1​=1⨁2⨁...n,然后再取输入序列的奇数位置或偶数位置的异或和设为v2v_2v2​,显然v1⨁v2v_1 \bigoplus v_2v1​⨁v2​就等于原序列的a0a_0a0​或ana_nan​,那么问题就解决了

2021-05-13 14:51:24 13

原创 力扣 1482. 制作 m 束花所需的最少天数 二分

https://leetcode-cn.com/problems/minimum-number-of-days-to-make-m-bouquets/思路:经典二分求解最小化最大值问题。没什么好说的,看出来天数的单调性应该就能想到二分吧。class Solution {public: int minDays(vector<int>& bloomDay, int m, int k) { int l=0x3f3f3f3f,r=0,mid,n=bloomDay.

2021-05-09 01:30:33 44

原创 力扣 1723. 完成所有工作的最短时间 二分+回溯+剪枝/状压dp

https://leetcode-cn.com/problems/find-minimum-time-to-finish-all-jobs/思路一:显然最大工作时间满足单调性,所以可以用二分来写。但是每次checkcheckcheck我们只能暴力递归,这样会超时……所以要加上一些剪枝操作……这里简单说一下吧,任务要从耗时多的开始分配,如果第一次分配都没有找到可行解,那么一定没有可行解(该次递归下),如果最优分配没有可行解,那么一定没有可行解(该次递归下)。class Solution {public

2021-05-08 17:35:00 25

原创 力扣 554. 砖墙 哈希 思维

https://leetcode-cn.com/problems/brick-wall/思路:很容易证明,最优解的那条线至少穿过了一对砖块之间的缝隙。也就是说,最优解一定在缝隙处产生。那么我们可以计算每个缝隙处的砖块数量,并记录最大值,答案就等于墙的个数减去该最大值。class Solution {public: int leastBricks(vector<vector<int>>& wall) { unordered_map<unsi

2021-05-02 02:18:30 48

原创 力扣 403. 青蛙过河 记忆化搜索/dp

https://leetcode-cn.com/problems/frog-jump/思路一:记忆化搜索应该是比较直观的,就是给爆搜加了一个记忆化的优化,用vis[i][j]vis[i][j]vis[i][j]记录在第iii块石子上跳jjj步是否有解,然后就是比较常见的搜索写法了,不多赘述。class Solution {public: vector<unordered_map<int,bool>> vis; bool dfs(vector<int&

2021-04-29 04:03:20 77

原创 力扣 633. 平方数之和 双指针/暴力

https://leetcode-cn.com/problems/sum-of-square-numbers/思路:暴力枚举或者双指针都行。class Solution {public: bool judgeSquareSum(int c) { unsigned int l=0,r=ceil(sqrt(c)); while(l<=r) { unsigned int tmp=l*l+r*r;

2021-04-28 00:53:42 7

原创 力扣 938. 二叉搜索树的范围和 递归

https://leetcode-cn.com/problems/range-sum-of-bst/思路:简单题就不多说了,遍历整棵树计算即可。dfs\bfs都行,考虑效率的话可以加一些剪枝。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), lef

2021-04-27 01:45:32 16

原创 力扣 1011. 在 D 天内送达包裹的能力 二分

https://leetcode-cn.com/problems/capacity-to-ship-packages-within-d-days/思路:经典二分求符合题意的最小值问题。显然船的最大运载重量weightweightweight越大,把传送带上所有包裹送达所需要的天数daydayday越小。那么我们可以二分船的最大运载重量,然后O(n)O(n)O(n)判断它是否可以在DDD天内运输完所有的货物。时间复杂度O(nlog(∑i=0nweightsi))O(nlog(\sum_{i=0}^nwei

2021-04-26 01:47:38 114

原创 力扣 897. 递增顺序搜索树 中序遍历 思维

https://leetcode-cn.com/problems/increasing-order-search-tree/思路:最简单的方法就是用数组存储中序遍历的结果,再按照要求重建。这种做法没什么意思,我们看一下原地修改的算法。我们可以用preprepre记录中序遍历中当前节点的上一节点,在处理完左子树后,preprepre指向左子树的最右节点,需要令pre.right=cur,cur.left=nullpre.right=cur,cur.left=nullpre.right=cur,cur.le

2021-04-25 01:42:21 46

原创 力扣 377. 组合总和 Ⅳ dp

https://leetcode-cn.com/problems/combination-sum-iv/思路:类似于进阶的跳楼梯问题。dpidp_idpi​表示总和为iii的组合(实际上按照题意应该是排列)个数,那么对于所有的numsjnums_jnumsj​,只要numsj<=inums_j<=inumsj​<=i就有dpi=dpi+dpi−numsjdp_i=dp_i+dp_{i-nums_j}dpi​=dpi​+dpi−numsj​​。初始令dp0=1dp_0=1dp0​=1即可

2021-04-24 01:30:28 20

原创 力扣 368. 最大整除子集 dp DAG上最长路

https://leetcode-cn.com/problems/largest-divisible-subset/思路:若nums[i]nums[i]nums[i]可以整除nums[j]nums[j]nums[j],我们认为从iii到jjj有一条边,那么O(n2)O(n^2)O(n2)处理数组后就得到了一张图,问题就转换为求这张图上的最长路径。有两种做法,第一spfa求最长路;第二先把图转换为有向无环图,然后利用dp求DAG上最长路。先给出第一种做法的代码:class Solution {publ

2021-04-23 14:58:51 14

原创 力扣 363. 矩形区域不超过 K 的最大数值和 思维 set

https://leetcode-cn.com/problems/max-sum-of-rectangle-no-larger-than-k/思路:暴力枚举的话是O(n2m2)O(n^2m^2)O(n2m2)的,肯定过不了。考虑枚举左右边界l、rl、rl、r,然后计算a[i]=∑j=lrmatrix[i][j]a[i]=\sum_{j=l}^{r}matrix[i][j]a[i]=∑j=lr​matrix[i][j],那么问题就转换为:在长度为nnn的数组aaa中,找到一个区间s、ts、ts、t,使得a

2021-04-22 20:12:53 22

原创 力扣 91. 解码方法 dp

https://leetcode-cn.com/problems/decode-ways/思路:dp[i]dp[i]dp[i]表示字符串s[0……i)s[0……i)s[0……i)的解码方法的总数,那么对于s[i]s[i]s[i],如果它不等于字符0,显然它可以单独解码为一个字符,所以dp[i]=dp[i−1]dp[i]=dp[i-1]dp[i]=dp[i−1];再考虑s[i−1]、s[i]s[i-1]、s[i]s[i−1]、s[i],如果这两个连起来可以解码为11−2611-2611−26中的某个字符,

2021-04-21 19:16:53 20

原创 力扣 26. 删除有序数组中的重复项 双指针

https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/思路:定义快慢指针,初始slow=fast=0slow=fast=0slow=fast=0,如果nums[fast]=nums[slow]nums[fast]=nums[slow]nums[fast]=nums[slow],那么递增fastfastfast,不然就令nums[slow+1]=nums[fast]nums[slow+1]=nums[fast]nums[s

2021-04-18 00:58:46 9

原创 LearnOpenGL 高级OpenGL—高级数据

文章目录写在前面高级数据分批顶点属性复制缓冲总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。高级数据我们在OpenGL中大量使用缓冲来储存数据已经有很长时间了。操作缓冲其实还有更有意思的方式,而且使用纹理将大量数据传入着色器也有更有趣的方法。这一节中,我们将讨论一些更有意思的缓冲函数,以及我们该如何使用纹理对象来储存大量的数据(纹理的部分还没有完成)。OpenGL中的缓冲只是一个管理特定内存块的对象,没有其它更多的功能了。在我们将它绑定到一个缓

2021-04-17 22:19:16 20

原创 LearnOpenGL 高级OpenGL—立方体贴图

文章目录写在前面立方体贴图创建立方体贴图天空盒加载天空盒显示天空盒优化环境映射反射折射动态环境贴图总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。立方体贴图我们已经使用2D纹理很长时间了,但除此之外仍有更多的纹理类型等着我们探索。在本节中,我们将讨论的是将多个纹理组合起来映射到一张纹理上的一种纹理类型:立方体贴图(Cube Map)。简单来说,立方体贴图就是一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面:一个有纹理的立方体。你

2021-04-17 15:31:57 32

原创 OpenGL 立方体贴图(CubeMap)原理

文章目录参考文章什么是立方体贴图创建一个立方体贴图采样方式参考文章Learn OpenGL知乎—Sqazine什么是立方体贴图简单来说,立方体贴图就是一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面:一个有纹理的立方体。这样做的好处是什么?不妨假设我们使用的立方体是1×1×1的,那么从坐标原点到该立方体上的任意一点可以组成一个方向向量,该方向向量最终会击中立方体的某个面,从而获取与之对应的纹理值。如下图所示:所以用立方体贴图来实现天空盒非常简单。创建一个立方体贴图由于它有6

2021-04-17 02:55:39 162

unity3D项目—Flappy Bird

通过unity3D开发的简单2D游戏—Flappy Bird,内附完整u3d工程的压缩包(无教程),所用u3d版本为2019.4.12f1。

2020-10-14

XNView安装包(exe文件)

XnView是一个图像浏览器和多媒体播放器,自身支持100多种图片格式。在做光线追踪相关的项目时,可能需要查看ppm文件,然而windows并不支持直接查看这种文件,下载安装XNView即可。

2020-09-22

csu_xiji的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除