LeetCode 1219.黄金矿工 算法思路 简单的DFS,由于题目中允许从任意点出发,故需要遍历每一个格子作为起点进行DFS。其余的和常规DFS相同 算法实现 123456789101112131415161718192021222324252627282930313233343536class Solution {public: void dfs(int x, int y, vector<vector< 2022-02-05 #LeetCode #每日一题
LeetCode LCP28.采购方案 算法思路 暴力(TLE) 直接两重循环双指针进行遍历,每遇到一个合法方案就ans++ 二分 在暴力的基础上,只枚举双指针的前一个指针,后一个指针使用二分查找得到一个最大可行的位置,方案数直接与两个指针相夹的数量相夹即可。 优化 考虑到存在相同报价,可以在遇到相同报价的时候直接复用之前相同报价的方案数,简单地-1即可。 算法实现 12345678910111213141516171819202122 2022-02-04 #LeetCode #LCP
LeetCode LCP23.魔术排列 算法思路 需要枚举数字K,当数字K大于等于N的时候结果将会固定 1. 由于第一次抽出的数字必然为偶数,当target的第一位数字为奇数的时候必然无法成功 2. K必然小于target序列最开始递增的偶数数量 1. 当target前递增的偶数为数列中全部偶数的时候,还需要注意是否会继续按照数列中的奇数顺序继续枚举 3. 由于题目性质,即抽牌必须按照洗牌后的顺序进行,故第一次计算出来的K即为得到最终正 2022-02-04 #贪心 #LeetCode #LCP #模拟
LeetCode 1725.可以形成最大正方形的矩形数目 算法思路 还能有什么思路,每个矩形既然只能用于切割一个正方形,那么自然能够切割出最大的边长自然就是短边长度。 本题使用索引的效率比迭代器更高 算法实现 1234567891011121314151617181920212223class Solution {public: int countGoodRectangles(vector<vector<int>&g 2022-02-04 #LeetCode #每日一题
LeetCode 29.两数相除 算法思路 笑死,直接利用右移和左移作为乘二和除以二来用,同时将变量统一采用long long保存,通过将被除数减去\(2^n\)倍的除数,累计这个\(2^n\)倍最终可以得到结果。 (上面的思路漏看了题目下面的提示,即不允许使用long long) 由于不允许使用long long,又希望尽可能获得更大的可用数字的绝对值空间(即希望可以让计算的绝对值扩大到\(2^{32}\)),故最终选择所有的减 2022-02-03 #LeetCode
LeetCode 1414.和为K的最少斐波纳契数字数目 算法思路 考虑采用深度优先搜索的方式进行,由于每个斐波纳契数字均小于前一个数字的两倍(2除外),可以基于这个特性,每次找到小于当前所求总和的最大的斐波纳契数字x,然后总和 -= x,反复迭代之后即可得到结果。 算法实现 1234567891011121314151617181920212223242526class Solution {public: int f[50], n, a 2022-02-03 #LeetCode #每日一题
AcWing 167.木棒 算法思路 本题需要考虑几种剪枝方式 减少枚举方案 同样从大到小依次进行枚举,由于最终答案中木棍长度固定,从更长的小棍开始枚举可以减少产生方案的数量。 可行性剪枝 对于单根木棍无法整除所有小木棍长度之和的情况和加入某根小木棍后总长度超过当前枚举的总长度的情况均可以直接进行剪枝。 移除冗余方案 由于本题中只需要求出总和,故基于组合数进行枚举 当某个长度的小木棍无法用于构造答案的时候,直接跳过所有与其 2022-02-03 #算法学习 #AcWing #DFS #剪枝
AcWing 166.数独 算法思路 数据表示 本题中采用单行表示一个问题,考虑采用数组记录每行、每列和每九宫格的数字出现情况。 题目中选择使用x和y计算得到每个单元格在给出的数组中对应下标。 剪枝思路 首先本题中每一种情况均唯一,并无冗余。采用的剪枝方法包括 可行性剪枝 优先遍历最少方案 其中可行性剪枝采用了位运算进行优化,通过位运算和lowbit算法可以在o(1)的时间内确定数独中某一行、列和九宫格存在的一个方案。同 2022-02-02 #算法学习 #AcWing #DFS #剪枝
AcWing 167.小猫爬山 算法思路 考虑到本算法的时间复杂度,如果遍历全部的情况会导致TLE,故需要进行一定的剪枝。 所以本题需要进行适当的剪枝,优先搜索状态较少的方案,即从个体质量较大的单位开始搜索。同时对非最优方案进行剪枝,最终可以得到结果 算法实现 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 2022-01-29 #算法学习 #AcWing #DFS #剪枝
AcWing 1118.分成互质组 算法思路 本算法的基本思路不难,但是必须要注意实现分组的方式不能写错,只需要简单地记录每个组所保存的数字的索引即可得到答案。 算法实现 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162#include <iost 2022-01-27 #算法学习 #AcWing #DFS