1.队列
这个问题我们可以通过动态规划来解决。首先,我们需要找到一个子序列,使得这个子序列的每个元素都等于它的位置索引(从1开始)。
我们可以定义一个动态规划数组 dp[i],其中 dp[i] 表示以 a[i] 结尾的最长满足条件的子序列的长度。
具体步骤如下:
首先,初始化一个长度为 n 的数组 dp,所有元素都设为0。
接着,遍历原序列 a,对于每个元素 a[i],如果 a[i] 等于 i + 1(因为数组索引从0开始,所以需要加1),则 dp[i] = dp[i-1] + 1,否则 dp[i] = dp[i-1]。
最后,dp[n-1] 就是满足条件的最长子序列的长度。
另外,要得到最少删除的元素数量,可以用原序列长度 n 减去 dp[n-1]。如果 dp[n-1] 为0,说明无法得到这样的序列,输出 -1。
具体代码如下所示:
def min_deletions_to_form_sequence(a):
n = len(a)
dp = [0] * n
for i in range(n):
if a[i] == i + 1:
dp[i] = dp[i - 1] + 1 if i > 0 else 1
else: dp[i] = dp[i - 1] if i > 0 else 0
if dp[-1] == 0:
return -1
else:
return n - dp[-1]
2.学习心得
最近学习了本届青训营ai的课程,首先是非常开心能够在一个能够即学即练的环境下来学习这方面的知识,同时青训营还鼓励我们写笔记,我感觉这都使我非常受益,我基本上算是一个技术小白了,非常开心能加入一个这样的学习活动,也非常感激能开展这样的一个活动,班会课上老师们也都很亲切,能和这么多小伙伴们在这种可以边学边练的环境中学习使我备受激励,除了可以在交流群组中交流也可以在及时通过marscode中的ai解释代码来让我对不懂的部分进行理解,我感觉这都是非常好的。
在此前我已经使用marscode ai来刷过几个题了,感觉出的题目是很切合实际的,很多题目甚至都是从实际生活中出发的,而这恰好使我最需要的,于我而言,从实际问题中摘出来的问题能让我产生更多的兴趣来解决,解决后也会更有成就感。 在marscodeai刷题界面中各种环境都是搭建好了的,只需要输入代码点击运行即可在下面看到运行的结果,省去了环境搭建的流程,也避免了可能存在比较繁杂的环境而导致的代码输入正确却无法输出正确结果的情况,能让我更加专注在代码与写代码的目标本身。
今天的学习中我在实际使用中体会到了利用代码来调用大语言模型是比对话框来与大模型交流可以更准确更全面的解决困难出现的问题的,我也发现了通过代码与ai的结合不仅可以让学习更高效,也可以让生活中的问题解决起来更高效,当大语言模型帮助人们解决了生活中比较重复性的工作的时候人就可以有时间去学习更多知识,更多的精力投入到新的创作中了。 总之非常开心能在这里与大家一起学习一起进步!