随笔分类 -  算法

摘要:给定两个字符串str1和str2,输出两个字符串的最长公共子序列。如果最长公共子序列为空,则返回"-1"。目前给出的数据,仅仅会存在一个最长的公共子序列 输入 "1A2C3D4B56","B1D23A456A" 返回值 "123456"参考 https://blog.csdn.net/hrn1216 阅读全文
posted @ 2021-05-14 17:28 寅鸷 阅读(59) 评论(0) 推荐(0)
摘要:给定两个字符串str1和str2,输出两个字符串的最长公共子序列。如果最长公共子序列为空,则返回"-1"。目前给出的数据,仅仅会存在一个最长的公共子序列 输入、 "1A2C3D4B56","B1D23A456A 输出 “2345” 状态转换方程:s1[i] == s2[j] > dp[i][j] = 阅读全文
posted @ 2021-05-14 15:05 寅鸷 阅读(79) 评论(0) 推荐(0)
摘要:LFU(least frequently used (LFU) page-replacement algorithm)。即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。 unordered_map<int, list<node>::iterat 阅读全文
posted @ 2021-05-14 10:51 寅鸷 阅读(408) 评论(0) 推荐(0)
摘要:LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。 struct node { node(int _k = 0, int _v = 0, int _cnt=0) :k(_k), v(_v),cnt(_cnt) {} in 阅读全文
posted @ 2021-05-14 10:45 寅鸷 阅读(154) 评论(0) 推荐(0)
摘要:方法一:深度优先遍历 DFS深度优先搜索: 可以理解为暴力法模拟机器人在矩阵中的所有路径。DFS 通过递归,先朝一个方向搜到底,再回溯至上个节点,沿另一个方向搜索,以此类推。 剪枝: 在搜索中,遇到数位和超出目标值、此元素已访问,则应立即返回,称之为 可行性剪枝 。 int is_illegal(i 阅读全文
posted @ 2020-12-10 20:47 寅鸷 阅读(111) 评论(0) 推荐(0)
摘要:初始版本 改进版本 阅读全文
posted @ 2019-12-26 12:12 寅鸷 阅读(101) 评论(0) 推荐(0)
摘要:题解:首先排序,因为这里只有5个数,所以冒泡就行了,然后用0去补齐两个非0数之间的差距。 阅读全文
posted @ 2019-12-25 17:42 寅鸷 阅读(217) 评论(0) 推荐(0)
摘要:题解:先将每一个单词切下来,一次存入栈中,空格也一并存入,然后再依次弹出组合成一个string返回即可。 阅读全文
posted @ 2019-12-25 16:40 寅鸷 阅读(146) 评论(0) 推荐(0)
摘要:题解:首先判断移位 n 是否超出字符串的长度,如果超出那么就要取模。 阅读全文
posted @ 2019-12-25 16:06 寅鸷 阅读(157) 评论(0) 推荐(0)
摘要:参考博客: https://blog.csdn.net/isunbin/article/details/81707606 https://blog.csdn.net/qq_25940921/article/details/82183093 代码有所改动 struct node{ int key; i 阅读全文
posted @ 2019-12-20 13:44 寅鸷 阅读(194) 评论(0) 推荐(0)
摘要:之前有一道题是找出数组中一个只出现一次的数字,而这次是两个,当然方法也是相同。 参考大佬的题解: 阅读全文
posted @ 2019-12-18 16:17 寅鸷 阅读(118) 评论(0) 推荐(0)
摘要:平衡二叉树:左右子树的高度之差为1 阅读全文
posted @ 2019-12-18 14:19 寅鸷 阅读(165) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2019-12-17 10:13 寅鸷 阅读(91) 评论(0) 推荐(0)
摘要:因为数组是有序的,所以只要用二分法先找到数字出现的位置,然后在左右统计个数 注意:这里二分法不能使用递归,因为可能会由于数组过大导致递归深度太深,应该使用迭代进行二分 阅读全文
posted @ 2019-12-17 09:52 寅鸷 阅读(105) 评论(0) 推荐(0)
摘要:通过图示可以看出,当p1和p2一直往后走,当p1为空的时候,p1就跑到链表p2的头节点的地方 当p2为空的时候,p2就跑到p1的头节点的地方,这样p1和p2所走的路程就是一样多了,必定在公共 节点处相遇 哈哈哈,抄一段大佬的代码! 阅读全文
posted @ 2019-12-16 15:41 寅鸷 阅读(166) 评论(0) 推荐(0)
摘要:思路很简单,定义两个数组,lower代表小写字母是否被访问过,upper代表大写字母是否被访问过 如果当前字母已经在之前被查询过了就不需要再次查询了 一次遍历当前数组中的每一个字母,然后在内层循环中查找后面是否存在相同的,如果没有相同的就直接返回了 当然还有大佬只使用一个数组来存放大小写,先便利一次 阅读全文
posted @ 2019-12-16 15:11 寅鸷 阅读(95) 评论(0) 推荐(0)
摘要:盗用一个大佬的解题思路 min({arr[p2]*2, arr[p3]*3, arr[p5]*5}) 是c++11支持的写法,内部运用initializaer_list<int>的方法实现。 阅读全文
posted @ 2019-12-16 14:43 寅鸷 阅读(92) 评论(0) 推荐(0)
摘要:一次遍历数组,将当前a【i】与其后面的每一个a【j】进行组合,即判断a【i】a【j】 与 a【j】a【i】哪一个更小 如果是a【j】a【i】更小的话,则交换a【j】与 a【i】的值。如此一来则能够找到每一个数的最合适的位置。 有点类似于冒泡排序的思想,将每一个能够组合起来得到最小值的a【j】放到当前 阅读全文
posted @ 2019-12-16 10:53 寅鸷 阅读(132) 评论(0) 推荐(0)
摘要:第一次使用的方法是依次遍历每一个字串,然后记录最大值就可以了,但是这样的话,算法的时间复杂度为O(n2) 很显然这样做不是最优解 改进之后的算法时间复杂度为O(n),用一个sum来记录字串的和,如果当前字串和负数的话,那么就要将sum直接赋值为array[i] , 因为如果sum为负数的话,当前 a 阅读全文
posted @ 2019-12-14 20:30 寅鸷 阅读(96) 评论(0) 推荐(0)
摘要:一道考察堆排序的算法题: 堆排序思路:构造堆 --> 将堆顶元素调整到队列末尾 --> 调整堆 --> 继续调整元素 参考博客:https://www.cnblogs.com/chengxiao/articles/6129630.html 阅读全文
posted @ 2019-12-12 22:08 寅鸷 阅读(171) 评论(0) 推荐(0)