- 博客(29)
- 收藏
- 关注
原创 每日一题(十二)
这个题目我们需要掌握回文数的判断,还有就是N进制计算的掌握,我们可以把这个计算方法记下来,回文数如果是奇数我们需要保证中心数的两边相等,偶数两边相等,总而言之就是两边是对称的就可以称为是回文数,这个题目不能使用string转为数字,因为不仅仅是因为是16进制的问题,string转数字可能也会超过其类型的范围,使用我们使用数组来解决这个问题。
2023-04-05 22:47:20 52
原创 每日一题(十)
今天的题目并不难,我们只是需要掌握循环就可以了,还有就是需要注意存储Sn的数需要使用double类型,因为加起来的情况下是有小数存在的,在进行求和的时候使用1.0/n来保证数据的精度。
2023-03-31 19:35:28 56
原创 每日一题(九)
第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。第一步:任意给定两个正整数;判断它们是否都是偶数。若不是则执行第二步。则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。这一个题目主要用到了数论,我们计算最大公约数与最小公倍数。最小公倍数=两数的 乘积 /最大公约(因)数。最大公约数有两种方法。
2023-03-30 20:43:51 54
原创 每日一题(八)
我们需要注意因为正方形是特殊的长方形,所以第一个计算公式计算出来的数量是包括了正方形的数量的,我们这个题目需要的长方形数量是需要使用公式计算出来的数量减去正方形数量的。长方形里面数长方形的个数计算公式(包含正方形):(1+2+3+...+m)*(1+2+3+...+n)=n*m*(n+1)*(m+1)/4。这个题目有两种解法,一种是暴力枚举,另一种是利用数学的思想。使用暴力枚举,是不会超时间复杂度的,是可以放心使用的。长度2的为(m-1)*(n-1);我用的是数学的方法,
2023-03-29 20:49:05 56
原创 每日一题(五)
这个题目主要是两个问题,我们需要解决进制的转换与回文数,如题目所说的一样就是看上去是数字是对称的一串字符,我们可以使用string帮助我们解决;进制的转换有模板,我们需要记住,先转换为十进制再转换为其他进制。
2023-03-25 16:52:44 47
原创 每日一题(三)
这个题目如果使用遍历循环来做按照题目的数据范围肯定是可会超时的,这个时候我们就需要了解一下动态规划的思想,可以帮助我们有效的解决这个问题,线性规划就是类似于一个备忘录,记录我们已经计算过的数,帮助我们减少重复的计算量,降低程序的时间复杂度。
2023-03-22 22:36:22 53
原创 每日一题(1)
根据题目的数据范围需要有100位,所以我们只能使用string类型来进行数据的存储,我们使用string头文件提供的length()或者size()函数计算字符串长度,通过ASCII码来将字符型转化为整型,计算出来题目所需要和,利用to_string函数帮我们将整型转化为字符型,使用一个数组存储需要输出的结果,再次利用ASCII码输出题目需要的答案。
2023-03-20 22:51:11 53
原创 动态规划(三)
其实就类似于01背包,对于一个物品有两种决策选或不选,但是分组背包是在01背包的基础上对物品进行了分组,并且每一组只能最多选择一个物品,所以我们不妨用01背包的思想去思考分组背包.ki+1.选ki件:dp[i][j]=dp[i-1][j-kiv[i]]+kiw[i];3.选两件:dp[i][j]=dp[i-1][j-2v[i]]+2w[i];2.选一件:dp[i][j]=dp[i-1][j-v[i]]+w[i];1.不选:dp[i][j]=dp[i-1][j];
2023-02-22 12:29:04 50
原创 动态规划(二)
背包算法就是一种典型的从规模1推导到规模N的算法,是最常见的一种DP算法。它的核心要素有三个:背包容量,物品重量(或体积),物品价值,题目一般会要求在背包容量限制下获取最大价值。最简单的背包问题,有N件物品,每件物品都有一个重量和价值,在背包空间有限情况下如何选择物品,使得价值最大。这类问题显然不能用贪心思想解决。可以把物品编号从1......N,通过从物品1开始推导的方式解决。(1)只有物品1,背包够大时最大价值就是物品1的价值。
2023-02-22 11:42:56 57
原创 动态规划(一)
动态规划实质上是一种以空间换时间的技术,它在实现的过程中,不得不存储产生过程中的各种状态,所以它的空间复杂度要大于其它的算法。动态规划(Dynamic programming)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。(1) 最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。第一次的代码出现超时的情况,因为他对有的数字的解进行了多次的重复计算,这个时候动态规划的好处就体现出来了。
2023-02-22 10:51:03 71
原创 基础图论与搜索(四)
我们这里用dist数组表示每个点到起点的距离,那么更新操作就是dist[b]=min(dist[b],dist[a]+w),这样就可以更新和a相连的b点距离起点的距离,这个更新的过程就是”松弛操作”。(2)一旦发现有这样一个结点,记为v,满足D[v] > D[u] + w(u, v),则将D[v]的值减小,减小到和D[u] + w(u, v)相等。(3)上一步中,我们认为我们“改进了”结点v的最短路径,结点v的当前路径长度D[v]相比于以前减小了一些,于是,与v相连的一些结点的路径长度可能会相应地减小。
2023-02-13 18:12:42 56
原创 基础图论与搜索(三)
迪杰斯特拉(Dijkstra,单源最短路)算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法最终得到一个最短路径树。该算法常用于路由算法或者作为其他图算法的一个子模块。该算法的输入包含了一个有权重的有向图 G,以及G中的一个来源顶点 S。我们以 V 表示 G 中所有顶点的集合。每一个图中的边,都是两个顶点所形成的有序元素对。(u, v) 表示从顶点 u 到 v 有路径相连。我们以 E 表示G中所有边的集合,而边的权重则由权重函数 w: E → [0, ∞] 定义。
2023-02-13 15:39:35 119
原创 基础图论与搜索(二)
图(Graph)是由顶点的有穷非空集台和顶点之间边的集台组成的,通常表示为G(V,E) ,其中, G表示—个图,V是图G中顶点的集台,E是图G中边的集台。
2023-02-13 14:19:45 74
原创 基础图论与搜索(一)
沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的方法为回溯法,而满足回溯条件的某个状态的点称为“回溯点”如果一个都没有找到,则回退到之前访问过的顶点,看看是否有漏掉的;DFS一般用于求解问题有多少种情况,多少条路径,最大路径等等。回溯法(探索与回溯法)
2023-02-04 13:31:38 121
原创 基础算法(四)
如果我们把这个区间放缩一下,并且让数组元素都为0的这个数组a作为我们的原数组,那么数组a的差分数组b也是全为0,这样我们就构成了差分数组,那么我们真正需要输入到数组中的数就可以利用二位差分的性质进行了,也就是当区间 l = r时,我们让其加上一个需要输入的数,这样既输入了数据,也构成了差分数组。当然,这两个操作返回的迭代器可能是容器的尾后迭代器。如果所查找值在容器中,lower_bound返回的迭代器将指向第一个具有给定值的元素,而upper_bound返回的迭代器指向最后一个匹配给定值的元素之后的位置。
2023-01-20 16:24:40 70
原创 基础算法(二)
将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法);申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;设定两个指针,最初位置分别为两个已经排序序列的起始位置;,使查找成功,或直到子表不存在为止,此时查找不成功。首先,假设表中元素是按升序排列,将表中间位置记录的。
2023-01-19 14:37:51 50
原创 基础算法(一)
计数排序的基本思想是对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数(此处并非比较各元素的大小,而是通过对元素值的计数和计数值的累加来确定)。假设Ki=Kj(1≤i≤n,1≤j≤n,i≠j),若在排序前的序列中Ri领先于Rj( i
2023-01-19 13:50:12 94
原创 数据结构基础复习总结
树(Tree) 是一种重要的数据结构,其定义如下:树是n (n≥0)个有限数据元素的集合。当n=0时称为空树。当n>0时,是非空树,它满足以下两个条件:(1)有且仅有一个称为根的结点;(2)其余结点分为m (m≥0)个互不相交的非空集合T1,T2,……,Tm, 其中每个集合本身又是一棵树,称为根的子树。在一棵树中,每个结点被定义为它的每个子树的根结点的前驱结点,而它的每个子树的根结点就成为它的后继。
2023-01-12 21:40:45 69
原创 数据结构基础(三)
集合,数学中默认指无序集,用于表达元素的聚合关系。两个元素只有属于同一个集合与不属于同一集合两种关系。常见实现方式unordered_set,unordered_map,并查集,哈希表,启发式可并堆在实际应用中,可能需要关心集合元素顺序。集合上定义偏序关系(即≤号),可构成一个偏序集。有序性作为重要规律,可引入算法(如二分法)提升运行效率。偏序集实现方式set,map,二叉排序树(平衡二叉树)
2023-01-12 20:01:21 260
原创 数据结构基础(二)
从单量表节点中只有一个指向,直接后继的指针域next这样从某个节点出发,只能顺时针方向寻找它的后继节点,若要寻找节点的直接前驱,则需从头指针出发,查找前区,若希望能够快速查找一个节点的直接全区,则可以增加一个指向其直接前驱的指针域,这样就构成了双向链接表简称双向链表。循环链表是单链表的另一种形式,对于单链表而言,最后一个节点的指针域为空,如果该链表中最后一个节点的指针域指向头节点,整个链表形成一个环,就构成了循环单链表,从表中的任意节点出发均能找到表中的其他节点。顺序表的逻辑顺序和物理顺序是一致的。
2023-01-12 16:29:08 65
原创 数据结构基础(一)
我们在运行程序的过程中,会有运行结果出现错误的情况,这个时候就需要我们去解决这些问题,这些问题就是bug,而我们去解决这个问题就是debug。栈是只能在表尾进行插入或删除操作的线性表,通常我们称表尾为栈顶,表头为栈底,表尾插入称为入栈,表尾删除称为出栈。某种逻辑关系组织起来的一批数据,按一定的映像方式把它存放在计算机存储器中,并在这些数据上定义了一个运算的集合,就叫做数据结构。线性表是线性结构中最常用而又最简单的一种数据结构,线性表是线性结构的抽象,线性结构的特点是一对一的线性关系。
2023-01-12 15:24:58 203
原创 时空复杂度的个人理解以及课后作业理解
忙了几天,终于是有时间来写关于第一节课的博客,这也是个人第一次自己写博客。在这节课里面我们首先了解了时间复杂度的概念,在线编译器1s的计算大概是10^9,我们在写算法题目需要考虑题目的时间限制与空间限制(不过一般情况下,运算空间都是充足的,在此不做分析),同时对自己的算法进行优化,能够在限制中完成题目的要求。
2022-12-24 16:32:10 273 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人