摘要: 问题: 两个大数相乘,无法用计算机中现有的类型直接进行操作,因为表示范围有限。两个大数是通过字符串表示的。 解决思路: 将输入的字符串转换成char数组,在转成int数组,采用分治思想,每一位进行相乘。 公式: AB*CD = AC(BC+AD)BD ,然后从后到前满10进位。 摆放成另一种形式就看 阅读全文
posted @ 2020-08-12 20:37 周伯通789 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 参考知乎一位作者的写法,有时间再改成c++. 链接:https://www.zhihu.com/question/330983016/answer/726069573 问题: 马拉车用来搜索最长回文子串。 普通的搜索方法为逐一的向两端扩展,时间复杂度是O(n*n)。 马拉车算法的时间复杂度是线性的为 阅读全文
posted @ 2020-08-12 20:22 周伯通789 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 问题: 给定一个TargetNumber和一个Array,在Array中找出n个数,这n个数之和等于TargetNumber。 分析: 当n==1时,此时变成了典型的一维数组查找问题,可以采用排序和二分查找的方法。 当n==2时,先按升序排序,ptr1指向数组头,ptr2指向数组尾。若指针所指2数之 阅读全文
posted @ 2020-08-12 20:00 周伯通789 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 问题: 求一个数组中的两个数,使这两个数的和等于某个指定的数。 解析: 可以借助于hash表降低时间复杂度。 代码: 1 #include <vector> 2 #include <unordered_map> 3 using namespace std; 4 5 vector<int> twoSu 阅读全文
posted @ 2020-08-12 19:58 周伯通789 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 问题: 求树中两个节点的公共祖先。 可能情况1:树为二叉搜索树。 我们可以从根节点开始搜索,如果当前节点的值比两个节点的值都大,那么下一步遍历左子树。 如果当前节点的值比两个节点的值都小,那么下一步遍历右子树。 如果当前节点的值比一个节点大,比另一个节点小,那么当前节点就是最低公共祖先节点。 代码: 阅读全文
posted @ 2020-08-12 19:31 周伯通789 阅读(757) 评论(0) 推荐(0) 编辑