小伟的刷题日常
独语天涯
C/C++ Linux
展开
-
剪绳子问题
给出一段长度为n的绳子,将其剪成m端,要求剪出的长度的乘积最大。首先,我们得想到,只要绳子开始大于四,所有的绳子为了乘积最大都会被剪切,所以,我们可以先将小于4的绳子乘积保存下来,接下来继续求目标绳子的最大乘积。将每一个结果保存在数组中,绳子长度那一位对应的数据便是我们需要的数据。func MaxCutting(length int) int { if length < 2 { return 0 } if length == 2 { return 1 } if length ==原创 2021-09-14 00:24:02 · 158 阅读 · 0 评论 -
动态规划常见问题
动态规划就是把一个大问题分解为多个小问题,然后一个个去解决。Fibonacci:直接输出最后的结果,不保存中间的数据。func Fibonacci(n int) int { if n <= 1 { return n } i, j := 0, 1 for p := 2; p <= n; p++ { tmp := i + j i = j j = tmp } return j}func main() { //fun(0) i := Fibonacci(4)原创 2021-09-13 19:30:31 · 254 阅读 · 0 评论 -
KMP算法
给你一个文本串S,一个非空模板串T,问S在T中出现了多少次,时间复杂度要求O(n*m),如果我们用暴力法解决的话,会因为超时失败。KMP算法的核心在于构造next数组,当我们构造出next数组,问题就会迎刃而解,所谓next数组,就是文本串S每一个位置前的最长公共前缀的结束的下标,这样说可能还是有点晦涩,即数组i位置的值即为i位置之前的字符串头尾相同的字符的数量。首先构造next数组,如图func MakeNext(s string) []int { next := make([]int, len原创 2021-09-12 23:06:15 · 229 阅读 · 0 评论 -
2021-01-28
小伟的刷题日常(一)纠缠了三天的单链表(一)用了三天来消化的单链表,终于有了起色,说实话,主要在家打扰自己的事情太多了自己又无法沉下心来,原本一天解决的事,用了三天。闲话少说,直接上题今天写的事三个对于单链表变化的问题,所以,首先构造一个简单的单链表,这东西没啥好说的,直接上代码:#include<stdio.h>#include<stdlib.h>typedef struct node { int data; struct node* next;}N原创 2021-01-28 19:00:57 · 69 阅读 · 0 评论