栈刷题记(二-用栈操作构建数组)

这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

前言

  • 各位读者,晚上好呀!,不知不觉,小嘟已经在掘金社区发布了15篇文章(算上今天这一篇),在这15天中小嘟觉得掘金这个社区很nice,是一个大佬云集、社区活跃、定位很准确的一个社区,除此外,我最大的感受就是掘金的活动力度很大(不知道掘金从哪里赚钱买礼物呢😂😂😂),不管啦不管啦,反正我就是喜欢掘金
  • 小嘟叨叨完毕,开始进入正题...

正文

题目

image.png

题目约束条件

image.png

示例

image.png

题目分析

  • 小嘟在这里大胆猜测一下:肯定有读者看到这个题目的文字好多,然后就已经做好了放弃的准备😂😂😂 ,最后也就确实放弃了。
  • 有位伟人曾经说过:文字越长题越简单,越长意味着给的信息点也就越多。(小嘟我明人不说暗话,其实小嘟就是那个伟人😆😆😆)
  • 首先,我们要明白题目想要表达的意思是什么?它让我们干什么事情呢?
  • 小嘟在这里举一个例子:比方说n=5,也就意味list=[1,2,3,4,5],我们要做的是从左到右依次拿出一个数(依次就是一个数的前边没数字了才能取这个数),然后把它放到target数组中,我们将放进去的操作称为“Push”拿出来的操作称为“Pop”,最终得到target数组,本题的结果就是要我们求出操作的集合
  • 那么我们该怎么做呢
  • 第一件事,想都不用想,首先肯定要遍历
  • 第二件事,我们怎样遍历(重点)
+ **首先**,我们知道,操作无非**就是Push,或者是Pop这两种操作**,然后我们在遍历的过程中**肯定会比较**的,然后再想如果`比较为相等`,该**怎么办**呢?`答`:**相等那就是只进行了Push操作,没有Pop操作**。那如果`不相等呢`?`答`:**不相等那就是先进行“Push”操作,再接着进行“Pop操作”**。
+ `读者`:小嘟你**不能一直遍历,你还要退出循环呢**?
+ `小嘟`:对的,我还要退出呢,那么**我什么时候退出呢**?
+ `读者`:**是不是target数组遍历完了呢**?
+ `小嘟`:读者真厉害!我们要在比较完之后退出,小嘟已经说到了这个地方了,那就直接看代码吧!

代码及其结果展示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ini复制代码var buildArray = function(target, n) {
let j = 0,i=0;
let res = [];
while(j<target.length){
i++;
res.push('Push');
if(i == target[j]){
j++;
continue;
}
else res.push('Pop');
}
return res;
}

image.png

本题回顾

  • 小嘟把Push操作放在了比较的前边,这个位置小嘟也不是一次就想到的,所以,当读者看一些很难懂的代码的时候,不要觉得自己不行,在小嘟看来,这些时间复杂度和空间复杂度都很好的代码,肯定是经过很多次打磨了。
  • 代码比较简单,读者加油!

结尾

  • 学习算法,我们要学的是算法的思想,而不是每道题的代码应该怎样写。
  • 学习思路框架,可以让我们能更轻松的处理问题。
  • 最后的最后,小嘟想说一句话与读者共勉:成功不是一蹴而就的,而是一步一步熬出来的。成功的人懂得熬,所以成功;失败的人只会逃避困难,必然失败
  • 愿读者能够坚持下去!
  • 明天是工作日,大家晚安啦!

附件

题目直通车 👉 leetcode-cn.com/problems/bu…

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%