持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情
每日力扣是一个专门用来讲力扣中国每天发布的每日一题的栏目。本专栏不提供题目的解答源码,只讲解思路,目的是养成每日刷题、提高自己手感,从而达到算法熟练的目标。
题目(已做删减处理)
给你一个数组
target和一个整数n。每次迭代,需要从list = { 1 , 2 , 3 ..., n }中依次读取一个数字。请使用下述操作来构建目标数组target:-"Push":从list中读取一个新元素, 并将其推入数组中 -"Pop":删除数组中的最后一个元素。- 如果目标数组构建完成,就停止读取更多元素。题目数据保证目标数组严格递增,并且只包含1到n之间的数字。请返回构建目标数组所用的操作序列。如果存在多个可行方案,返回任一即可。
分析
特别简单的一道算法那题目。首先我们操作的是从1到n的数组。而且是严格递增的。那么我们就可以这么进行思考:
- 如果当前的数字在 target中,直接push即可;
- 如果当前的数字不在 target 中,那么先push再 POP 即可。
按照上面的逻辑,我们可以发散一下思维:
- 因为数组 严格单调递增的;
- 假设当前数据now 和 之前的数据 pre,如果中间数据不在 target 中,我们需要执行的 push 和 pop操作,也就是 now-pre-1 个。这样思考起来更加方便。
总结
一道十分简单的算法题目。对于算法新人来说,是很好的练手题目。特别是对于刚进入力扣学习算法的徐盛来讲,虽然算法很简单,但是思考和优化的逻辑还是需要新人们仔细考虑后,才能够想到的。
这道题目力扣评估为中等难度。个人认为达到不中等难度题目的要求,最多是easy难度。如果是在周赛中,最多也就是第二道题目的难度。所以建议所有的算法学生都能够 AC 这道题目。