至今无人解得出来的题(力扣上那些让人虎躯一震的题解)
至今无人解得出来的题(力扣上那些让人虎躯一震的题解)精妙算法:使用 Manacher 和 KMP, Manacher 算法是求最长回文子串中非常漂亮的算法了。常规做法:常规思路是使用动归解决(大家的讨论也都是围绕 DP 进行的),但是如果你了解一个定理:四平方和定理:任一个正整数都能拆成四个整数的平方和;//详见2016年蓝桥杯省赛真题《四平方和》,这个问题就可以很快解决,速度快得超群。常规思路是进行二分查找,此时就能看到一个奇妙的解法,代码如下:基本思路就是从矩阵第一行最右侧开始查找,当前值比 target 大往左走,比 target 小的话往下走。
力扣(LeetCode)的题库在众多程序员中一直拥有良好口碑,题库内的编程练习题很多是从实际业务中抽象出来的,无论是求职找工作刷算法题,还是 ACM 的同学希望得到一些专项的练习,亦或是对于算法书籍的一些实际操作,都可以在平台上得到收获。
题,对应有题解,有的题解运行速度快,构思巧妙,有的题解循环次数太多,运行速度慢,本文列举了一些让人 "虎躯一震" 的题解,以飨读者,帮助大家发现算法和题解中意想不到的美。
136. 只出现一次的数字放在最开头的这道题对于我来说印象非常深刻,一个想法是放一个 Hash Table,每个出现的数字就放在桶里面,每次出现就统计,代码如下:
但是这样子做的话想法就太常规了,神奇的做法如下(使用 XOR):
常规思路是使用动归解决(大家的讨论也都是围绕 DP 进行的),但是如果你了解一个定理:四平方和定理:任一个正整数都能拆成四个整数的平方和;//详见2016年蓝桥杯省赛真题《四平方和》,这个问题就可以很快解决,速度快得超群。
240. 搜索二维矩阵 II常规思路是进行二分查找,此时就能看到一个奇妙的解法,代码如下:
基本思路就是从矩阵第一行最右侧开始查找,当前值比 target 大往左走,比 target 小的话往下走。
214. 最短回文串常规做法:
精妙算法:使用 Manacher 和 KMP, Manacher 算法是求最长回文子串中非常漂亮的算法了。
本题目可以转换为求给定字符串从首字母开始的最长回文子串(然后将余下的 reverse,insert 到头部就可以),而求从首字母开始的最长回文子串,可以用 Manacher 算法,也可以将 str 反转以后拼接到 str 尾部,使用 KMP 的求 next 数组,这样 next 数组最后一个值就是从首字母出发的最长回文子串长度。
希望本篇文章对大家解题有帮助,如有更好的题解欢迎在评论中分享交流~
本文作者:Nova
声明:本文归 “力扣” 版权所有,如需转载请联系。