![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法题
Gary_海航
这个作者很懒,什么都没留下…
展开
-
矩阵链相乘--动态规划
问题的陈述就省了,网上很多。 想谈一下动态规划和递归。先说递归,递归的核心是,将一个复杂的,规模庞大的问题,一步步的,把问题规模变小,直到问题简单到可以直接解决。 那么动态规划就更近一步,很多问题如果直接递归,那么往往会出现重复计算同一个值很多次的问题,这是一个很大的代价,因此,动态规划将记录子过程的计算结果,再需要的时候直接使用,避免了重复计算的问题,大大减小了代价。下面是矩阵链相乘的代码实现原创 2017-10-31 22:04:43 · 392 阅读 · 0 评论 -
剑指offer-正则表达式匹配
题目 请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配代码#include<iostream>#include<cstri...原创 2018-05-17 14:01:57 · 231 阅读 · 0 评论 -
剑指offer-打印从1到最大的N位数
题目 输入数值n,按顺序打印从1到最大的n位数,例如输入n=3,则从1,2,3,一直打印到999 思路 若使用循环遍历 1- 999…9 并依次输出,当位数n过大时,无论将其存入int或long或long long都会溢出,故使用字符串来模拟数字加法代码#include<iostream>#include<cstring>using namespace...原创 2018-05-17 10:17:43 · 364 阅读 · 0 评论 -
排序算法汇总
1.冒泡排序 冒泡排序,相邻的数据进行两两比较,小数放在前面,大数放在后面,这样一趟下来,最小的数就被排在了第一位,第二趟也是如此,如此类推,直到所有的数据排序完成。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我们不会无聊地把他们俩交换;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以原创 2017-11-02 09:46:34 · 245 阅读 · 0 评论 -
剑指offer-重建二叉树
题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。 思路 先序遍历的第一个节点即为根结点,而中序遍历中,该节点左边的节点为左子树节点,右边的为右子树的节点,因此根据这些节点区间可以确定出...原创 2018-03-19 15:54:02 · 186 阅读 · 0 评论 -
剑指offer-数组中重复的数字
题目一 在一个长度为N的数组里所有数字都在0~n-1的范围内。请找出数组中任意一个重复的数字。例如,输入{2,3,1,0,2,5,3},则输出2或者输出3。思路 数组中所有数字都在0~n-1范围内。如果这个数组中没有重复的数字,那么当数组排序之后,数字i应该出现在下标为i的位置上。由于数组中有重复的数字,所以有些位置可能就有多个数字,而有些位置没有数字。代码#include<...原创 2018-03-17 17:08:46 · 208 阅读 · 0 评论 -
动态规划之背包问题
问题描述: 问题可以描述为:有 N 件物品和一个容量为 V 的背包。第 i 件物品的体积是 s[i],其价值是 v[i]。求解,在不超过背包容量情况下,将哪些物品装入背包可使价值总和最大。思路: 动态规划。令V[i][j]代表,从前i项物品中取出若干项,装入体积为j的背包中能得到的最大价值。那么很自然的,V[i][j]是下面两个量的最大值: 1.V[i-1][j],也就是,第i项物品不放进背包原创 2018-01-23 15:37:31 · 281 阅读 · 0 评论 -
最长子序列--动态规划
一.题目描述 在字母表上分别给出两个长度为m和n的字符串x和y,确定在x和y中的最长公共子序列。例如,x为“ABCBDAB”,y为“BDCABA”,则两者的最长公共子序列为BDAB。 二.思路分析 假设两个字符串为x1,x2…xi和y1,y2…yj,再令L【i,j】表示这两个的最长公共子序列。思路如下:如果xi==yj(即最后一个字母相等),则,L[i,j]=L【i-1,j-1】+1.如果xi原创 2017-10-25 09:14:17 · 553 阅读 · 0 评论 -
回文数-lintcode-c++
准备知识 1.sprintf函数 sprintf 最常见的应用之一是把整数打印到字符串中。例如把整数123 打印成一个字符串保存在s 中,sprintf(s, “%d”, 123); //产生”123” 2.c++格式化输出cout<<dec<<a<<endl; //以十进制形式输出整数 cout<<hex<<a<<endl; //以十六进制形式输出整数a cout<<setbase(原创 2017-09-02 21:52:47 · 415 阅读 · 0 评论 -
单例-lintcode-c++
准备知识: 1.this指针 在建立对象时,系统会为每一个对象分配独立的存储空间,也就是给每个对象中的数据成员都分配有自己独立的存储空间。如果对同一个类定义n个对象,则有n组同样大小的空间以存放对象中的数据成员。但对于成员函数来说,对象中的数据成员。一个函数的代码段在内存中只有一份。也就是说,成员函数的代码段在内存中只有一份。也就是说,同一个类中的不同对象在调用自己的成员函数时,其实它们调用的是原创 2017-09-02 10:22:24 · 299 阅读 · 0 评论 -
字符串置换-lintcode-c++
题目 给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。置换的意思是,通过改变顺序可以使得两个字符串相等。 思路 将两个字符串进行排序,排序过后进行比较。 代码 class Solution { public: /* * @param A: a string * @param B: a string * @retur原创 2017-09-02 20:53:16 · 336 阅读 · 0 评论 -
剑指offer---表示数值的字符串
题目 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。代码#include<iostream>#include<cstring>using namespace...原创 2018-05-17 17:04:16 · 234 阅读 · 0 评论