算法刷题
一只小菜鸡的刷题记录
cyd1999
这个作者很懒,什么都没留下…
展开
-
leetCode307:线段树解法
今天做到一个题目,看起来很简单很简单,但是O(n)的复杂度都超时了题目如下正确的思路是利用线段树。加入给我们一个长度为n的数组,我们可以将n个元素的和均分到一颗二叉树上,假设二叉树的节点层序遍历为0,1,2,3,4…。我们可以用一个数组来存储这颗树。根节点0保存0到n-1内的元素值之和。m=0+(0+n-1)/2。0的左节点为1保存0到m内的元素值之和,0的右节点2保存m+1到n-1内元素值之和。再分别对1和2之两个节点划分。直到最后节点保存的只有一个元素为止。代码如下class NumArray原创 2022-04-05 00:52:51 · 982 阅读 · 0 评论 -
leetCode刷题打卡
今天刷到的这个题没用到啥经典的算法。主要思路就是找对子,用到的数据结构为哈希表代码如下class Solution {public: bool canReorderDoubled(vector<int>& arr) { unordered_map<int,int> elem_cnt; for(int &e: arr){ elem_cnt[e]++; } vector原创 2022-04-01 23:23:55 · 243 阅读 · 0 评论 -
leetCode209
今天刷到一道题,有两种解法:滑动窗口和二分法。同时学到了C++中的一个简化二分的函数low_bound()请看题给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长原创 2022-04-03 22:28:50 · 60 阅读 · 0 评论 -
n!后缀0个数
leetcode172阶乘后的0题目描述如下给定一个整数 n ,返回 n! 结果中尾随零的数量。提示 n! = n * (n - 1) * (n - 2) * … * 3 * 2 * 1示例1输入:n = 3输出:0解释:3! = 6 ,不含尾随 0示例二输入:n = 5输出:1解释:5! = 120 ,有一个尾随 0解题思路我们要看最终结果有多少个后缀0,其实就是看这些乘数有多少个10的因子,而10可以拆成2和5两个质因数。2的数目一定比5多(这还是蛮容易证明的),所原创 2022-03-26 23:07:45 · 299 阅读 · 0 评论 -
leetCode780(反向分析)
今天刷到一道比较有意思的题,请看题乍一看我立马想到了DFS+剪枝。如是乎有了以下代码 struct node{ pair<int,int> pos; int tag; }; bool reachingPoints(int sx, int sy, int tx, int ty) { //dfs+剪枝 vector<node> st; //标记数组,防止重复 set<原创 2022-04-11 23:15:18 · 93 阅读 · 0 评论 -
leetCode刷题记录
第一次发博客,主要目的还是当笔记用吧lettCode2039题题目大致要求是给一张图,两两节点之间的连接长度为1.要我们求出从一个节点到其他节点的所有距离。着我首先想到的是迪杰斯塔拉的,但是这个时间复杂度是n^2的,所以最后超时了。标准题解是用的BFS。大致思路是从源点开始,一层层的遍历所有的节点。第i层的节点到源点的距离就是i。这样找出所有节点到源点的距离。然后根据这个距离算出题目中要求的“最短时间"主要过程有两步骤1、将题目给出的边转换成邻接表(以二维数组的形式,用vector<.原创 2022-03-21 19:28:30 · 1315 阅读 · 0 评论 -
刷题打卡:leetCode22(回溯法、动态规划法)
今天刷到一道题,共有回溯法,动态规划两种解法,感觉蛮有意思的题目: 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例1输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8解法一:回溯法 //回溯法 /** * @brief 回溯法解题 * 思路:一步原创 2022-03-30 13:37:59 · 539 阅读 · 0 评论 -
刷题打卡:leetCode2024(滑动窗口)
题目大致意思说:给一个长度为n的字符串,里面只包含T和F,在能最多能修改k个字符的情况下,求修改后字符串最大连续字串的长度示例一输入:answerKey = “TTFF”, k = 2输出:4解释:我们可以将两个 ‘F’ 都变为 ‘T’ ,得到 answerKey = “TTTT” 。总共有四个连续的 ‘T’示例二输入:answerKey = “TFFT”, k = 1输出:3解释:我们可以将最前面的 ‘T’ 换成 ‘F’ ,得到 answerKey = “FFFT” 。或者,我们原创 2022-03-29 11:05:49 · 253 阅读 · 0 评论 -
字典树思想
今天刷了一道很有意思的题,leetCode404题目给出的描述如下刚开始看的时候,感觉毫无头绪,因为不太懂字典序是个啥。后来battle了好久,终于还是忍不住去看了看题解,才发现,字典序原来就是按照字符串的规则去排序呀!思路如下:我们取1-n中的任意一个数v。我们可以发现。按照字典序来的话。它下一个数应当是v*10(如果v*10小于等于n的话),反之则为v+1。 下下个数为v*10*10(如果v*10*10小于等于n的话)。根据这个规律我们很明显可以想到度为10的完全树中,根节点和它的最左边原创 2022-03-23 11:57:42 · 559 阅读 · 0 评论 -
C/C++编译器优化所带来的bug
关于C/C++编译器的默认优化以及volatile关键字的使用今天刷题,由于自己的粗心,讲赋值号写成==了,导致编译器把某段代码优化,而出了一个很诡异的bug,故提笔记之请看代码for(int len=1;len<=n;len++){ for(int i=0;i<=n-len;i++){ if(1==len){ tags[i][i]==1; }else if(l原创 2022-03-29 00:06:34 · 1475 阅读 · 0 评论