1.思路字符串匹配,通常我们使用的是互相比较,也就是 str1 : ABCABCD st2 : ABCABCTstr1 和 str2按照顺序比较。当匹配到str1的D 和 str2的T位置可以发现,不等。则直接从str1的第一个A+1位置在匹配。可以发现这样就是穷举的方法,相对来说是一种时间复杂度比较高的。因此,就出现了KMP算法。KMP字符串匹配算法: KMP的核心思想是先计算出当前字符的最长前缀和最长后缀的最长长度。不包含第一个前缀和最后一个后缀。举一个栗子,ABCABCD D的最长子串是多少
原创 2021-07-28 10:08:41
197阅读
1.题目一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的 金条,不管切成长度多大的两半,都要花费20个铜板。一群人想整分整块金 条,怎么分最省铜板?例如,给定数组{10,20,30},代表一共三个人,整块金条长度为10+20+30=60. 金条要分成10,20,30三个部分。 如果, 先把长度60的金条分成10和50,花费60 再把长度50的金条分成20和30,花费50 一共花费110铜板。但是如果, 先把长度60的金条分成30和30,花费60 再把长度30金条分成1
原创 2022-01-04 16:45:52
63阅读
1.计数器概念 对数器的概念和使用 0,有一个你想要测的方法a, 1,实现一个绝对正确但是复杂度不好的方法b, 2,实现一个随机样本产生器 3,实现比对的方法 4,把方法a和方法b比对很多次来验证方法a是否正确。 5,如果有一个样本使得比对出错,打印样本分析是哪个方法出6,当样本数量很多时比对测试依然正确,可以确定方法a已经正确。 2.代码体现 1.有一个你想要测的方法a,测试一个冒泡排...
原创 2022-01-04 16:54:47
489阅读
502. IPOIPO难度困难39假设 力扣(LeetCode)即将开始其 IPO。为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 k 个不同的项目。帮助 力扣 设计完成最多 k个不同项目后得到最大总资本的方式。给定若干个项目。对于每个项目 i,它都有一个纯利润 Pi,并且需要最小的资本 Ci 来启动相应的项目。最初,你有 W资本。当你完成一个项目时,你将获得纯利润,且利润将被添加到你的总资本中。
原创 2021-07-28 10:08:37
109阅读
1.问题一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。2.codepackage com.ncst.offer.ch1.offer.ch2;/** * @author i * @create 2020/7/20 18:16 * @Description */public class StackReverse { publ
原创 2021-07-28 10:08:44
116阅读
神算法-基础03 比较器的使用 1)比较器的实质就是重载比较运算符 2)比较器可以很好的应用在特殊标准的排序上 3)比较器可以很好的应用在根据特殊标准排序的结构上 public static class MyComp implements Comparator<Integer> { //实现Com ...
转载 2021-10-29 19:59:00
123阅读
2评论
核心解决的是字符串中寻找最长回文问题 package com.ncst.improve.one; /** * @author i * @create 2020/7/1 16:57 * @Description 字符串最长回文问题 */ public class Code_04_Manacher { //为字符串前后添加一个 # A#B#A public static char [] manacherString(String str){ char[] chars
原创 2022-01-04 16:45:51
107阅读
1.题目一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的 金条,不管切成长度多大的两半,都要花费20个铜板。一群人想整分整块金 条,怎么分最省铜板?例如,给定数组{10,20,30},代表一共三个人,整块金条长度为10+20+30=60. 金条要分成10,20,30三个部分。 如果, 先把长度60的金条分成10和50,花费60 再把长度50的金条分成20和30,花费50 一共花费110铜板。但是如果, 先把长度60的金条分成30和30,花费60 再把长度30金条分成1
原创 2021-07-28 10:08:36
120阅读
核心解决的是字符串中寻找最长回文问题package com.ncst.improve.one;/** * @author i * @create 2020/7/1 16:57 * @Description 字符串最长回文问题 */public class Code_04_Manacher { //为字符串前后添加一个 # A#B#A public static char [] manacherString(String str){ char[] chars
原创 2021-07-28 10:08:43
146阅读
1.计数器概念对数器的概念和使用0,有一个你想要测的方法a,1,实现一个绝对正确但是复杂度不好的方法b,2,实现一个随机样本产生器3,实现比对的方法4,把方法a和方法b比对很多次来验证方法a是否正确。5,如果有一个样本使得比对出错,打印样本分析是哪个方法出6,当样本数量很多时比对测试依然正确,可以确定方法a已经正确。2.代码体现1.有一个你想要测的方法a,测试一个冒泡排...
qt
原创 2021-07-28 10:25:56
354阅读
神算法-基础02 归并排序 整体就是一个简单递归,左边排好序、右边排好序、让其整体有序 让其整体有序的过程里用了排外序方法 利用master公式来求解时间复杂度 归并排序的实质 时间复杂度O(N*logN),额外空间复杂度O(N) public static void mergeSort(int[ ...
转载 2021-10-22 22:41:00
118阅读
2评论
hash函数Hash(哈希),又称“散列”。散列(hash)英文原意
原创 2022-11-02 15:16:28
56阅读
题目判断一个链表是否为回文结构 【题目】 给定一个链表的头节点head,请判断该链表是否为回文结构。 例如: 1->2->1,返回true。1->2->2->1,返回true。 15->6->15,返回true。 1->2->3,返回false。进阶: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)。1.借助栈实现1.1 思路栈是一个先进后出的结果,如果一个链表是回文的话 那么势必 出栈的val 等于 正序的v
原创 2021-07-28 10:12:14
99阅读
堆排序思路思路:堆排序是比较重要的排序,主要是基于堆结构。而堆结构就是完全二叉排序树。因为二叉排序树的结构特点。 * 我们可以用数组进行模拟二叉树的左右子节点, 关系就是 root节点的子节点为 2*i + 1 root节点的右子节点为 2*i+2 * 而子节点或者右子节点的父节点为 (i-1)/2 ,通过上述关系就可以通过数组来实现堆结构。 * 而堆结构中比较重要的两个操作就是 一个是节点的生成 也就是heapInsert 比如添加一个节点3 需要父节点比较大小
原创 2021-07-28 10:21:02
390阅读
神算法-基础01 认识时间复杂度 常数时间的操作 :一个操作如果和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。 时间复杂度为一个算法流程中,常数操作数量的一个指标。常用O(读作big O)来表示。具体来说,先要对一个算法流程非常熟悉,然后去写出这个算法流程中,发生了多少常数操 ...
转载 2021-10-21 23:02:00
241阅读
2评论
原创 2022-01-04 16:36:43
426阅读
题目判断一个链表是否为回文结构 【题目】 给定一个链表的头节点head,请判断该链表是否为回文结构。 例如: 1->2->1,返回true。1->2->2->1,返回true。 15->6->15,返回true。 1->2->3,返回false。进阶: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)。1.借助栈实现1.1 思路栈是一个先进后出的结果,如果一个链表是回文的话 那么势必 出栈的val 等于 正序的v
原创 2022-01-04 16:45:54
59阅读
原创 2022-01-04 16:53:54
137阅读
1.问题 1、已知一个字符串都是由括号(和右括号)组成,判断该字符串是否是有效的括号组合。 例子: 有效的括号组合:()(),(()),(()()) 无效的括号组合:(,()),((),()(() 2、题目进阶: 已知一个字符串都是由括号(和右括号)组成,返回最长有效括号子串的长度。 2.code //1.当遇到不是( )的符号时 直接返回false; //2.遇到 ) status<0 返回false //3.遇到( status就++ package com.ncst.offer.ch1
原创 2022-01-04 16:45:51
99阅读
1.问题 荷兰国旗问题 给定一个数组arr,和一个数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间, 大于num的数放在数组的右边。 2.code 思路: 荷兰国旗问题的解决 * 1.设定less 为-1 位置 more 为arr.length位置 cur为当前移动的 在0位置 * a.终止条件 cur < more 一直执行...
原创 2022-01-04 16:45:55
64阅读
  • 1
  • 2
  • 3
  • 4
  • 5