随笔分类 - 数据结构和算法
摘要:```C++ include include include using namespace std; //最长公共子序列 vector getdp1(string str1, string str2) { vector dp(str1.length(), vector(str2.length())
阅读全文
摘要:题目 给定两个字符串str1和str2, 长度分别稳M和N,返回两个字符串的最长公共子串 解法一 这是一道经典的动态规划题,可以用M N的二维dp数组求解.dp[i][j]代表以str1[i]和str2[j]当做公共子串结尾的情况下,公共子串能有多长.然后分析可以发现dp[i][j]只与dp[i 1
阅读全文
摘要:```python include include include include using namespace std; //获取最长递增子序列的递增数组 vector getdp1(vector arr) { vector dp(arr.size()); for (int i = 0; i a
阅读全文
摘要:题目三 给定数组arr, arr中所有的值都为整数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,在给定一个整数aim代表要找的钱数,求换钱有多少种方法. 解法一 暴力递归 用0张arr[0], 让arr[1...N 1]组成剩下的钱,这样的方法数记为res1 用1张arr[0],
阅读全文
摘要:题目一 给定数组arr,数组中有N个元素,其中所有的之都为整数且不重复.每个只代表一种面值的货币,每种面值的货币可以使用任意张,在给定一个整数aim代表要找的钱数,求组成aim的最少货币数. 解法 依然是用二维数组分析的动态规划问题,数组dp长为N行aim 1列.其中dp[i][j]代表用arr[0
阅读全文
摘要:题目 给定一个矩阵m, 从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的树子累加起来就是路径和,返回所有的路径中最小的路径和. 解法一 这是一道经典的动态规划题,状态转移方程为dp[i][j] = min{dp[i - 1][j], dp[i][j - 1]} + m[i][j
阅读全文
摘要:题目 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 代码: #include <iostream> using namespace std; //这种解法不用对n的位数进行移动 int numberOf1(int n) { int cnt = 0; unsigned int fl
阅读全文
摘要:题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 代码(c/c++): #include <iostrea
阅读全文
摘要:来自《编程之美》3.3 题目:定义了三种不同的操作把不同的字符串变成相同 1.修改一个字符; 2.增加一个字符; 3.删除一个字符; 为了把两个字符串变得相同,每进行一次上述的某个操作,距离加1,最后定义两个字符串的相似度为“距离+1”的倒数。要求求出任意两个字符串的相似度。 解法: #includ
阅读全文
摘要:(来自《编程之美》) 给定两个字符串s1和s2,要求判断s2是否能够被s1做循环移位(rotate)得到的字符串包含。 我的解法(想法比较复杂): 1 #include<iostream> 2 using namespace std; 3 bool isCover(string s1, string
阅读全文
摘要:在面试或者数据结构相关的考试中,经常会被要求到的算法主要有插入排序、冒泡排序、归并排序和快速排序。对这几种算法,不但应该知道其原理或者过程,还应该对他们的各种特性了然于胸,从最好、最差、平均时间空间复杂度等方面对比其优劣。在面试中这几种排序算法也会经常作为手写代码能力的考量,所以应该要求自己对这几种
阅读全文

浙公网安备 33010602011771号