算法
不要做程序员的小松鼠
愉快的调bug......
展开
-
个人学习笔记:算法——回溯法
回溯法通俗解释: 把所有的可能解做成解空间树,遍历这个数,如果路径可行存下来,返回上一个结点继续遍历;如果路径不可行,直接返回上个结点重新遍历,直到所有的结点遍历完,得到需要的解。回溯法的特点: - 回溯法是通用的解题方法,也可以理解为试探法。 - 可以求得问题的所有解或者任意解。 - 采用树的深度优先遍历。 - 适用于解的组合数较大的问题。 - 每个结点都可能成为扩展原创 2015-10-10 10:28:10 · 651 阅读 · 0 评论 -
如何计算时间复杂度
一、概念 时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数) 比如:一般总运算次数表达式类似于这样: a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+f a ! =0时,时间复杂度就是O(2^n); a=0,b<>0 =>O(n^3); a,b=0,c<>0 =>O(n^2)依此类推 eg: (1) for(i=1;i<=n;i++) //循转载 2015-10-09 16:46:29 · 780 阅读 · 0 评论 -
个人学习——算法:递归式复杂度计算(主方法)
在分析根据递归方程分析算法的时间复杂度时,常见到如下形式的方程, T(n) = a * T(n/b) + f(n) a >= 1,b > 1,f(n)一般是个简单函数这时可以有2种方法,来计算时间复杂度: 一是用递归树,逐层代入原式,最终形成一个级数,然后用一个函数来表达,得到T(n)。 二是应用主项定理Master Method 。其实,主项定理也就是对递归树方法的一种归纳,形成了固定的原创 2015-10-12 15:18:44 · 4682 阅读 · 0 评论 -
C++字符串拷贝实现:递归方法&非递归方法
面试遇到的写代码题: 递归 char* c_copy(char* dst,const char* src) { if (*(src) =='\0') { *dst = '\0'; return dst; } *dst = *src; dst++; src++; c_copy(dst,src);原创 2016-05-09 20:13:05 · 1333 阅读 · 0 评论 -
字符串中数字子串的求和
字符串中数字子串的求和题目: 给定一个字符串str,求其中全部数字串所代表的数字之和。要求: 1.忽略小数点字符,例如“A1.3”,其中包含两个数字1和3。 2.如果紧贴数字子串的左侧出现字符‘-’,当连续出现次数为奇数时, 则数字视为负,连续出现的数量为偶数时,则数字视为正。 例如:“A-1BC--12”,其中包含数字为-1和12。例:原创 2016-05-13 21:18:35 · 1279 阅读 · 0 评论 -
转圈打印二维数组
题目要求: 思路: 我的最初思路: 将矩阵的四个边作为边界,一个循环执行四次九十度转弯,用swich、case实现,当四个边界指向一个位置结束循环,但是在拐点的处理上比较麻烦。 资料参考的思路: 写一个函数,输出二维数组一圈的元素。 循环执行上个函数,也就是输出每个圈的元素。原创 2016-05-08 21:37:01 · 1837 阅读 · 0 评论 -
C++判断字符串是否为变形词
思路 遍历字符串a计算a中每个字符出现的次数计算b中相同字符的出现次数比较注意: 任一字符串为空返回false。两个字符串长度不等,可直接返回false。复杂度率高n*n,降低复杂度的方法: 使用哈希表,记录字符和出现次数。使用数组或者容器,acsII个数为256,申请256的空间即可,记录字符出现的次数。 /*题目:给定两个字符串str1和str2,如果str1和str2中原创 2016-05-09 20:59:45 · 1662 阅读 · 0 评论