随笔分类 - 算法
摘要:## 背景 该算法用于求字符串的最长回文子串长度。 ## 参考文章 >[最长回文子串——Manacher 算法](https://segmentfault.com/a/1190000003914228),该文浅显易懂,重点推荐 >[Manacher's Algorithm](https://www.
阅读全文
摘要:该算法有很多版本,这里给出java中实现比较好的一种方式。其中, 为无符号右移。 二分查找第一个值为obj的元素 / 二分查找第一个值为obj的元素 @param array @param obj @return 若数组为空,返回 1; 若查找到,则返回其索引; 若未查找到,返回负值(可能为 1)
阅读全文
摘要:前言 有时为了信息保密或是单纯阅读代码,我们需要删除注释。 之前考虑过正则表达式,但是感觉实现起来相当麻烦。而状态机可以把多种情况归为一类状态再行分解,大大简化问题。本文就是基于状态机实现的。 目录 删除C/C++代码注释 删除Java代码注释 程序 参考 删除C/C++代码注释 需要考虑的情况 /
阅读全文
摘要:这是曾经的一个面试题,正好引出状态机编程思想。挺不错的一个例子。 题目描述 给定一个字符串,它由以下字符组成: 左括号“(” 右括号“)” 下划线“_” 大小写字母构成的字符串(单字母也算作字符串) 该字符串组成有以下规则限定: 括号成对出现且不会嵌套,保证语法正确 字符串可以出现在括号内,也可以出
阅读全文
摘要:链接:https://www.nowcoder.com/questionTerminal/655a43d702cd466093022383c24a38bf来源:牛客网 题目描述 给定一个字符串,问是否能通过添加一个字母将其变为回文串。 输入描述 一行一个由小写字母构成的字符串,字符串长度小于等于10
阅读全文
摘要:题目描述和思路来自博客:http://www.cnblogs.com/coding-wtf/p/5849222.html,在此表示感谢。 题意:给定一个数组,数组中元素的值只能是1或者-1,求其和为0的最长连续子序列的长度; 数组为1,-1,1,-1,1,-1,1,-1,其结果为:8 数组为1,1,
阅读全文
摘要:题目描述: 给定一段数组,求每个区间的最小值乘这段区间的和,输出每个区间得到的最大值。 样例输入:[1 2 6],可能有以下几种情况: [1]:结果为1*1=1; [2]:结果为2*2=4; [6]:结果为6*6=36; [1,2]:结果为1*(1+2)=3; [2,6]:结果为2*(2+6)=16
阅读全文
摘要:(赛码网的模拟考试题,这道题目挺有意思) 搭积木 时间限制:C/C++语言 1000MS;其他语言 3000MS内存限制:C/C++语言 65536KB;其他语言 589824KB 题目描述: 一天,小明买了许多积木回家,他想把这些积木拼接在一起。每块积木有两个接口,每个接口我们用一个数字标记,规定
阅读全文
摘要:两道题都可以用动态规划的方法做,只是状态转移方程不同。 最长公共子串(注意子串是连续的) 1、先建立一个二维数组array[str1.size()][str2.size()](全部初始化为0),初始化第一行和第一列(元素相同处置1),然后进入状态方程 2、状态转移方程: if(str1[i] ==
阅读全文
摘要:关于trie数的其他应用,可参见http://www.cnblogs.com/dlutxm/archive/2011/10/26/2225660.html,感觉写的不错。
阅读全文
摘要:[编程题] 模时间限制:1秒空间限制:32768K给定四个正整数a,b,c,k,回答是否存在一个正整数n,使得a*n在k进制表示下的各位的数值之和模b为c。输入描述:第一行一个整数T(T <= 5,000)。接下来T行,每行四个正整数a,b,c,k(1 ≤ a ≤ 10^18; 2 ≤ k ≤ 10
阅读全文
摘要:题目描述给出一个正整数n,我们把1..n在k进制下的表示连起来记为s(n,k),例如s(16,16)=123456789ABCDEF10, s(5,2)=11011100101。现在对于给定的n和字符串t,我们想知道是否存在一个k(2 ≤ k ≤ 16),使得t是s(n,k)的子串。输入描述:第一行
阅读全文
摘要:这是爱奇艺的一道算法题。 题目描述请参考博客http://blog.csdn.net/sinat_30186009/article/details/52356053,在此表示感谢。 基本思路参考了以上文章,但是上面文章中的算法是java版,这是次要的,主要的问题是算法用的是原始递归思想,这样会造成计
阅读全文
摘要:最简单的方法是依次遍历每个数字,但这种算法时间复杂度太高,若再用上递归,数字一大内存就爆了,时空复杂度都很高,令人无法忍受。 因此探索出一种目前为止比较满意的方法。 思路来自《编程之美》计算数字1的个数(友情提示:若没有看过请先翻到后面预习,方便理解代码),拓展一下即可(特别要注意的是计算数字0,它
阅读全文
摘要:矩阵求逆运算有多种算法: A-1=(LU)-1=U-1L-1,将A分解为LU后,对L和U分别求逆,再相乘; 通过解线程方程组Ax=b的方式求逆矩阵。b分别取单位阵的各个列向量,所得到的解向量x就是逆矩阵的各个列向量,拼成逆矩阵即可。 下面是这两种方法的c++代码实现,所有代码均利用常规数据集验证过。
阅读全文