
基本算法
Absoler
这个作者很懒,什么都没留下…
展开
-
递归妙用:不用for循环实现回文串分割
问题来源是某学校的python作业(比我们学校教的好多了),题目要求如下:题目要求定义semidrome(半回文)串:由若干回文串(长度>=2)拼接而成,例如:aabb(aa和bb)、ababcbii(aba和bcb和ii)。现要求实现 is_semidrome(s) 函数,判定字符串s是否是半回文串。核心要求:不能使用for和while循环,尽量递归。然后复杂度呢不用怎么考虑,数据应该比较小。我这里直接把能够通过oj的代码贴出来,大家一看就明白了。def is_semidrome(原创 2021-03-09 00:45:21 · 305 阅读 · 1 评论 -
面试&考研基本数据结构和算法——排序
排序稳定性:具有相同关键字的记录排序后次序不变。代码中数组都从0开始冒泡排序稳定,序列有序时O(n)vector<int> BubbleSort(vector<int> v){ bool f=true; while(f){ f=false; for(int i=0;i<n-1;i++){ if(v[i]>v[i+1]){ f=true;原创 2020-08-29 17:39:04 · 249 阅读 · 0 评论 -
莫队—优雅的暴力算法
例题牛客暑期训练营 J题意描述:输入一串整数(n<=1e5),对于每个询问(i,j),输出a[1]…a[i]以及a[j]…a[n]里数字的种类数,询问一共q个(<=n)思路分析:暴力解法,即对于每个询问均通过遍历寻找答案,会令复杂度高达O(n^2),考虑对其进行优化。我们知道对于询问(i,j),去掉i对结果造成的影响加上j对结果造成的影响,在O(1)内就变为了询...原创 2018-07-20 09:51:55 · 274 阅读 · 0 评论 -
全排列生成方法汇总
递归法 按字典序生成整体思路:首先原序列已经按照字典序排好,继而通过逐个添加新字符生成新序列,字符添加所遵守的规则即是,按照字典序贪心地添加,(遇到未与已确定序列重复的字符,就添加在后面;遇到重复的就跳过这个字符),第一个由于不存在会重复的情况,所以生成序列即为原table,之后逐个回溯,由于是从后往前,故字典序逐个上升,符合要求。附代码#include<iostream>...原创 2018-08-19 21:21:57 · 1757 阅读 · 0 评论 -
MFC项目一:基于逆波兰表达式的计算器
知识基础:我们平时所见到的,类似于(2+9)*6的计算式,都可称之为中缀表达式,其双目运算符位于两个操作数之间;而逆波兰表达式又可称为后缀表达式,其操作符位于两个操作数之后,例如 1+1 -> 11+,(2+9)*6 -> 29+6*。在进行计算时,从左到右遍历算式遇到操作数即压入数栈,遇到操作符即从数栈中弹出两个数字进行计算,再将结果压入栈中,由于其可通过有序遍历得到结果这一特征...原创 2018-09-01 00:54:03 · 750 阅读 · 0 评论 -
约瑟夫环
问题原型:n个人围坐一圈依次报数(1~n),第m个人离席;之后从第(m+1)个人开始继续报数,报至第m个人时同样离席,求最后剩下的人的最初编号。1.递归法考虑将问题拆分,对于刚去掉m的环:1,2,,m-1,m+1,,,n,可以视作环(通过平移得到,前面原本有m个元素):m+1,,,n,1,2,,m-1即从m+1开始依次从1重新编号,如果我们能找到这个长度为n-1的环的解,将...原创 2018-09-02 12:42:05 · 823 阅读 · 0 评论 -
poj 1920 汉诺塔变种
思维题 链接暂时没明白为啥好多poj的总结把它放在dp里题目大意:现有汉诺塔残局,也就是说盘子零散地插在三个钉子上,当然各自也都遵守“上小下大”的摆放规律。求将其全部整理至一个钉子上所需最少步数,输出最后所在钉子位置(1,2,3)以及最小步数。首先对于基础的汉诺塔问题,由数列递推式可得,将高度为n的塔从一个钉子上转移到另外一个钉子上所需步数为(2^n-1)对于本题目,可逆向考虑,即...原创 2018-09-13 00:42:21 · 406 阅读 · 0 评论