海贼OJ/校招/社招刷题
Paul_learns_creating
如果时间有记忆
展开
-
给定一个序列,求该序列按顺序入栈时,所有合法的出栈序列
考虑使用回溯模拟这一操作过程,思路是,使用一个指针指向当前序列字符,准备一个栈,用来模拟入栈,准备一个队列,用来接收出栈元素,当指针指向字符末尾,也就是n时,说明所有字符都已经入栈完成,这是回溯结束,回溯结束时,栈和队列都有可能非空,栈非空时,将栈内元素弹出到队列末尾,然后依次出队得到出栈序列。note:对于指针当前指向的字符,有两种可能的操作:1,将其入栈;2,不入栈,此时弹出栈顶元素到队列,此时完成出栈操作。给定序列Si ,0原创 2023-09-16 14:02:28 · 243 阅读 · 1 评论 -
打印圣诞树
然后,确定递归基,当前层数来到n层时,递归结束,打印树根部分。为了避免重复递归调用,当递归函数发现某一层操作之前已经做过,即这部分的树已经画过,就直接返回。接下来递归的画左树和右树。X的范围 [ 0, n*3+n], Y的范围 [ 0, n*6-1]今天是圣诞节,牛牛要打印一个漂亮的圣诞树送给想象中的女朋友,请你帮助他实现梦想。首先,准备一块字符数组,初始化为空格。使用递归的思路解决。除去树根的部分,圣诞树可以看作由基本部分。每个基本部分的左下角和右下角又是又上述基本组成。这里画了10层,牛牛应该开心了。原创 2023-09-24 21:02:22 · 117 阅读 · 0 评论 -
海贼OJ#838. 2020年数据结构41题
首先啊,题目中距离D实际上可以变成以下的最大值问题:然后最小化D, 即变成:即需要能减少某两点之间的差值,才能使得这个表达式有新的最小值出现,那么只需要把a b c 三个数中最小值所在的队列中的元素弹出即可,然后使用新的队首元素重新计算上式,当某个队列为空时,结束循环。原创 2023-10-29 12:42:54 · 89 阅读 · 0 评论 -
海贼#236. 递归实现组合型枚举
定义一个递归函数sel(int least , int pos , int n , int m),代表从n个数中选择m个,pos表示当前位置可以用的最小数字是least,结束条件是pos == m,这样亦可保证字典序输出。原创 2023-10-28 16:39:29 · 22 阅读 · 0 评论 -
海贼#235. 递归实现指数型枚举
设计递归函数 p(int least , int pos , int n) ,代表pos位置可以用的最小值是least,可以用的最大值是n, 这样 程序如下:,递归终止条件是 可以用的最小值超过可以用的最大值。原创 2023-10-28 16:11:13 · 29 阅读 · 0 评论