- 博客(8)
- 收藏
- 关注
原创 树状数组解析
简介树状数组类是线段树,但是却又不同,其对于节点的更改,和查找集合是十分方便的原理假设,我们当前的数组为a,构成的线状数组为c那么即:c[1]=a[1]c[2]=a[1]+a[2]c[3]=a[3]c[4]=a[1]+a[2]+a[3]+a[4]c[5]=a[5]c[6]=a[5]+a[6]c[7]=a[7]c[8]=a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]我们换一个角度观察:c[0001]=a[1]c[0010]=a[1]+a[2]c[001
2021-10-21 22:23:09 110
原创 最少加油次数
题目:汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。沿途有加油站,每个 station[i] 代表一个加油站,它位于出发位置东面 station[i][0] 英里处,并且有 station[i][1] 升汽油。假设汽车油箱的容量是无限的,其中最初有 startFuel 升燃料。它每行驶 1 英里就会用掉 1 升汽油。当汽车到达加油站时,它可能停下来加油,将所有汽油从加油站转移到汽车中。为了到达目的地,汽车所必要的最低加油次数是多少?如果无法到达目的地,则返回 -1 。.
2021-10-09 18:16:23 482
原创 最多牌组数
题目:麻将的游戏规则中,共有两种方式凑成「一组牌」:顺子:三张牌面数字连续的麻将,例如 [4,5,6]刻子:三张牌面数字相同的麻将,例如 [10,10,10]给定若干数字作为麻将牌的数值(记作一维数组 tiles),请返回所给 tiles 最多可组成的牌组数。注意:凑成牌组时,每张牌仅能使用一次。示例 1:输入:tiles = [2,2,2,3,4]输出:1解释:最多可以组合出 [2,2,2] 或者 [2,3,4] 其中一组牌来源:力扣(LeetCode)链接:https://leet.
2021-10-09 18:15:31 2021
原创 劲爆金曲解析
剩下n首歌,t秒时间,问最多能唱几首的前提下,最长时间输出最多歌数和最长时间思路:典型的动归问题,假设我们现在要唱j秒,然后当我们新加入一首歌时,我们会判断能否加入。如果加入那么最多能唱的歌数为j减去这首歌的时间内能最多唱的数量+1如果不加入,那么就是未加入这首歌时,j秒内最多能唱的数量因此,我们推出公式dp[i][j]=max{dp[i−1][j],dp[i−1][j−songs[i]]+1}dp[i][j]=max\{dp[i-1][j],dp[i-1][j-songs[i]]+.
2021-10-01 18:21:01 98
原创 并查集(golang实现)
对于一组数据,当要求我们检查某两个数据是否在同一集合内时,就需要并查集去实现了如:<a,b>,<b,c>,那么很明显a、b、c都在同一集合内实现思路:如果我们先将输入的a、b指向自己,再将a指向b,即a令父亲为b那么:当我们再输入b,c后,跟上面一样的操作:很明显,我们就可以通过a,b,c是否拥有统一父亲确定是否为同集合了理解这个思路很简单,那么代码如何实现?首先,设置两个map进行数据的存储var fa map[int]int // 父节点var cn.
2021-09-30 23:07:18 539
原创 书架问题(动归)
题目:你把要摆放的书 books 都整理好,叠成一摞:从上往下,第 i 本书的厚度为 books[i][0],高度为books[i][1]。按顺序 将这些书摆放到总宽度为 shelf_width的书架上。先选几本书放在书架上(它们的厚度之和小于等于书架的宽度 shelf_widt),然后再建一层书架。重复这个过程,直到把所有的书都放在书架上。需要注意的是,在上述过程的每个步骤中,摆放书的顺序与你整理好的顺序相同。 例如,如果这里有 5 本书,那么可能的一种摆放情况是:第一和第二本书放在第一层书架上,.
2021-09-29 21:38:14 808 1
原创 马拉车算法实现
题目:给定一段字符串,求该其最长的回文子串主要思路:我们创建一个将目标字符穿进行扩充,然后使用#进行填充,并在前后分别添加^和$方便后续操作再创建一个数组T记录当前节点的半径如何构造?假设当前该设置下标为i的值了,i的左边有一个下标c的,其半径能到达的最右边为当前最大那么,如果i关于c对称的点在c的半径里面,那么i的半径一定大于等于其对称点的半径,即可以设置为对称点的半径,如果不在,就先假设当前i的半径为0然后我们再对i加上当前已知i半径的左右比较,如果相等则将T[i]+1,反之就..
2021-09-27 23:12:38 80
原创 Golang的指针类型传递
关于Golang的指针传递首先,我们先来看一段代码package mainimport "fmt"func main(){ var i []int try(i) fmt.Println(i) //[]}func try(i []int){ i = append(i, 1)}在这里,理论上来说本应该打印[1],因为切片为一个指针,在try函数对其进行了append,其本来指向的地址也应该改变。但是,这里却为空Golang的值传递首先,Go这门语言对参数的传递都是值传递的,也
2021-09-21 20:12:01 1300
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人