自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (2)
  • 收藏
  • 关注

原创 力扣 815. 公交路线 多源多汇bfs 思维

https://leetcode-cn.com/problems/bus-routes/思路一:首先看数据范围,暴力连边的话肯定是不行滴,因为车站的数量可能达到10610^6106。考虑转换一下思路,把一条公交路线抽象为一个点,那么任意两条有公共点的公交线路之间有一条边权为1的边,这样我们可以得到一张图,在这个图上做bfsbfsbfs即可,注意此时是多源多汇的bfs。class Solution {public: int numBusesToDestination(vector<vec

2021-06-29 12:47:17 251

原创 力扣 909. 蛇梯棋 bfs

https://leetcode-cn.com/problems/snakes-and-ladders/思路:思路很简单,就是bfsbfsbfs,但是这题目翻译的……挺离谱的。class Solution {public: vector<int> get2Pos(int n,int pos) { --pos; int tmp=pos/n; pos%=n; if(tmp&1)

2021-06-27 01:06:23 117

原创 力扣 773. 滑动谜题 bfs \ A*

https://leetcode-cn.com/problems/sliding-puzzle/思路:本质上还是bfs……但是数组不好计算哈希,我们可以把它转换为字符串,即按照从左到右、从上到下的顺序连接起来。这样交换操作和哈希操作都比较容易执行。class Solution {public: string getStr(const vector<vector<int>>& board) { string s; for

2021-06-26 01:32:33 203

原创 力扣 483. 最小好进制 二分

https://leetcode-cn.com/problems/smallest-good-base/思路:由题目可知,最小是2进制,因此其最终结果的好进制最多含有log2(n)+1log_2(n)+1log2​(n)+1个1,考虑到nnn的取值范围,我们最多需要枚举646464次。当1的个数确定的时候,我们可以二分进制kkk,并计算对应kkk进制数的大小,将其与nnn进行比较,如果相等的话,就更新记录最小的kkk。class Solution {public: using ll=long

2021-06-26 00:48:45 133

原创 力扣 1239. 串联字符串的最大长度 dfs 回溯 位运算

https://leetcode-cn.com/problems/maximum-length-of-a-concatenated-string-with-unique-characters/思路:dfs+回溯是比较容易看出来的。关键点在于重复字符的判断,如果每次都暴力遍历字符串计数的话,复杂度就太高了,我们可以使用二进制的思想,把一个字符串所含有的字符表示为一个二进制数,那么判断两个字符串是否有重复字符就很简单了,只需要把两个二进制数相与,看结果是否为0即可。class Solution {pub

2021-06-25 22:43:46 142

原创 力扣 1600. 皇位继承顺序 前序遍历

https://leetcode-cn.com/problems/throne-inheritance/思路:阅读理解题,读懂题目就很简单了。其实就是二叉树的前序遍历,只不过树的存储方式比较特殊。class ThroneInheritance {public: unordered_map<string,vector<string>> g; unordered_set<string> dead; string king; Thron

2021-06-25 22:05:53 110

原创 力扣 752. 打开转盘锁 bfs\启发式搜索(A*)

https://leetcode-cn.com/problems/open-the-lock/添加链接描述思路:显然题目是另外一种类型的最短路问题,最优解可用bfsbfsbfs解决。class Solution {public: int openLock(vector<string>& deadends, string target) { unordered_map<string,bool> vis; for(const str

2021-06-25 21:18:10 490

原创 力扣 149. 直线上最多的点数 枚举\哈希

https://leetcode-cn.com/problems/max-points-on-a-line/思路一:直接暴力枚举,显然答案的那条直线至少涵盖nnn个点中的某222个点,因此直接O(n2)O(n^2)O(n2)枚举直线上的两个点,再遍历一遍进行判断。复杂度O(n3)O(n^3)O(n3)。为了避免斜率不存在等特殊情况,我们可以对判断公式进行移项。class Solution {public: vector<int> p1,p2; int maxPoints(

2021-06-24 21:46:44 198

原创 力扣 65. 有效数字 DFA

https://leetcode-cn.com/problems/valid-number/思路:看官方题解吧,写的挺好的(其实是我自己也不会DFA orz)。class Solution {public: enum State { STATE_INITIAL, STATE_INT_SIGN, STATE_INTEGER, STATE_POINT, STATE_POINT_WITHOUT_INT,

2021-06-17 15:36:16 171

原创 力扣 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 144

原创 力扣 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 546 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 79

原创 力扣 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 108

原创 力扣 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 176

原创 力扣 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 155

原创 力扣 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 128

原创 力扣 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 158

原创 力扣 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 81

原创 力扣 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 75

原创 力扣 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 103

原创 力扣 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 297

原创 力扣 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 118

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

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

2021-06-06 17:21:32 308

原创 力扣 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 186

原创 力扣 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 122

原创 力扣 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 171

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

空空如也

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

TA关注的人

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