0%

➰️ 918.环形子数组的最大和

给定一个长度为 n环形整数数组 nums ,返回 nums 的非空 子数组 的最大可能和

环形数组 意味着数组的末端将会与开头相连呈环状。形式上, nums[i] 的下一个元素是 nums[(i + 1) % n]nums[i] 的前一个元素是 nums[(i - 1 + n) % n]

子数组 最多只能包含固定缓冲区 nums 中的每个元素一次。形式上,对于子数组 nums[i], nums[i + 1], ..., nums[j] ,不存在 i <= k1, k2 <= j 其中 k1 % n == k2 % n

🧬 443.最小基因变化

基因序列可以表示为一条由 8 个字符组成的字符串,其中每个字符都是 'A''C''G''T' 之一。

假设我们需要调查从基因序列 start 变为 end 所发生的基因变化。一次基因变化就意味着这个基因序列中的一个字符发生了变化。

  • 例如,"AACCGGTT" --> "AACCGGTA" 就是一次基因变化。

另有一个基因库 bank 记录了所有有效的基因变化,只有基因库中的基因才是有效的基因序列。(变化后的基因必须位于基因库 bank 中)

给你两个基因序列 startend ,以及一个基因库 bank ,请你找出并返回能够使 start 变化为 end 所需的最少变化次数。如果无法完成此基因变化,返回 -1

注意:起始基因序列 start 默认是有效的,但是它并不一定会出现在基因库中。

🐍 909.蛇梯棋

给你一个大小为 n x n 的整数矩阵 board ,方格按从 1n2 编号,编号遵循 转行交替方式 从左下角开始 (即,从 board[n - 1][0] 开始)每一行交替方向。

玩家从棋盘上的方格 1 (总是在最后一行、第一列)开始出发。

每一回合,玩家需要从当前方格 curr 开始出发,按下述要求前进:

  • 选定目标方格next,目标方格的编号符合范围[curr + 1, min(curr + 6, n2)]
  • 该选择模拟了掷 六面体骰子 的情景,无论棋盘大小如何,玩家最多只能有 6 个目的地。
  • 传送玩家:如果目标方格 next 处存在蛇或梯子,那么玩家会传送到蛇或梯子的目的地。否则,玩家传送到目标方格 next
  • 当玩家到达编号 n2 的方格时,游戏结束。

rc 列的棋盘,按前述方法编号,棋盘格中可能存在 “蛇” 或 “梯子”;如果 board[r][c] != -1,那个蛇或梯子的目的地将会是 board[r][c]。编号为 1n2 的方格上没有蛇或梯子。

注意,玩家在每回合的前进过程中最多只能爬过蛇或梯子一次:就算目的地是另一条蛇或梯子的起点,玩家也 不能 继续移动。

  • 举个例子,假设棋盘是 [[-1,4],[-1,3]] ,第一次移动,玩家的目标方格是 2 。那么这个玩家将会顺着梯子到达方格 3 ,但 不能 顺着方格 3 上的梯子前往方格 4

返回达到编号为 n2 的方格所需的最少移动次数,如果不可能,则返回 -1

🥩 small_spring17

在之前的章节中我们彻底完成了spring的核心功能,将整个bean声明周期中涉及到的核心方法都进行了完善,使得bean的创建可以更加灵活,在本节中我们进一步扩充现有spring的功能,将jdbc的功能整合到现有的spring项目中,使其具有查询数据库的功能,相关的代码我放到了 仓库

🍖 small_spring16

在之前的章节中,我们实现了spring中最重要的IOCAOP的相关核心功能,并且利用三级缓存解决了循环依赖的问题,但是在属性填充的过程中,一直都是直接将字符串传递给bean中对应的属性,这会导致一些类型转换的问题,并且并不是所有属性都是string的类型,所以本节中我们将会解决bean属性填充中类型转换的问题,以applyPropertyValues方法为入口,相关代码我放到了 仓库

🥬 15.三级缓存解决循环依赖

经过之前的编码,spring最核心的IOC和AOP的内容已经基本搭建完成,IOC章节中实现了bean的定义和注册,属性填充,读取配置文件,应用上下文,修改,初始化,销毁,aware感知,FactoryBean,事件监听。AOP章节中实现了对普通bean进行增强,自动扫描bean的注册,代理对象注入属性的内容。但是到目前为止,一个关键的问题还没有解决,那就是循环依赖,本节中就来解决这个问题,相关的代码我放到了 仓库

🍟 14.给代理对象的属性设置值

​ 上一节中使用注解的形式进行属性填充,但是填充的是普通的bean,也就是说代理对象的属性还都是null,这一节中我们就来解决这个问题,改变代理对象的创建时机,使得创建的bean代理对象内部的被代理对象的属性也不为空,但是并不是直接让代理对象本身的属性不为空,而是增加一个targettarget的内部属性不为空,相关的代码我放到了 仓库

🌶️ 13.通过注解注入属性信息

​ 上一节中我们新增了一种bean的注册方式:包扫描+@Component注解。这种方式实现了只用指定扫描哪些包,程序自动将这些包下使用了@Component注解的bean注册到注册表中,同时bean还可以使用占位符的形式从属性文件中读取属性值来填充,但是这两部分是分开的,所以本节中在bean自动注册过程中引入了注解进行属性注入的模块,可以使用@Value注解可以注入普通属性,使用@Autowired@Qualifier注解注入bean对象,相关的代码我放到了 仓库 中,并且注解属性注入的过程和包扫描的过程都加入了bean的生命周期