当前位置: 首页 > 知识库问答 >
问题:

一叠车牌:破解编码面试

汪理
2023-03-14

一堆盘子:想象一堆盘子。如果堆栈太高,它可能会倒塌
因此,在现实生活中,当前一个堆栈超过某个阈值时,我们可能会启动一个新堆栈。实现一组数据结构堆栈,以模仿这一点。SetOfstack应该由几个堆栈组成,并且应该在前一个堆栈超过容量时创建一个新的堆栈。

一组堆栈。推()和一组堆栈。pop()的行为应该与单个堆栈相同(也就是说,pop()应该返回与只有单个堆栈时相同的值)
后续
实现一个函数popAt(int index),该函数在特定子堆栈上执行pop操作
pop at索引的图书解决方案:

   public int popAt(int index) {
21 return leftShift (index, true);
22 }
23
24 public int leftShift(int index, boolean removeTop) {
25 Stack stack = stacks.get(index);
26 int removed_item;
27 if (removeTop) removed_item = stack.pop();
28 else removed_item = stack.removeBottom( );
29 if (stack.isEmpty(» {
30 stacks.remove(index);
31 } else if (stacks.size() > index + 1) {
32 int v = leftShift(index + 1, false);
33 stack . push(v);
34 }
35 return removed_item;
36 } 

第32行i nt v=leftShift(索引1,false);的解释缺失。有人能帮我吗?

共有1个答案

赏航
2023-03-14

嗯,leftShift函数的目标是从“索引”输入中给出的堆栈中弹出。在此之后,它在其他堆栈之间进行调整。因此,第27行从指定堆栈中弹出元素。

在此之后,在第32行中,它递归地调用自己,将这一次作为下一个堆栈的索引作为第一个参数,并作为第二个false。第一个参数表示在下一个递归调用中,它将使用下一个堆栈。第二个参数设置为false,意味着所需的操作(pop)已经完成,现在只剩下调整。

当标志removeTop设置为false时,该函数将进行上述调整。在本例中,不同之处在于,它从以下每个堆栈中移除底部元素,而不是顶部元素。这样就完成了所需的调整。对于术语调整,我指的是每次需要从下一个堆栈移动到上一个堆栈以填充任何空白的元素。

我希望有帮助。

 类似资料:
  • 问题内容: 我需要帮助,以帮助作者了解“大O”一章中问题11的答案。 问题是这样的: 下面的代码打印所有长度为k的字符串,其中字符按排序顺序排列。它通过生成所有长度为k的字符串,然后检查每个字符串是否已排序来做到这一点。它的运行时间是多少? 预订答案: O(kc k),其中k是字符串的长度,c是字母中的字符数。生成每个字符串需要O(c k)时间。然后,我们需要检查所有这些是否已排序,这需要O(k)

  • 8.3 破解LM Hashes密码 LM(LAN Manager)Hash是Windows操作系统最早使用的密码哈希算法之一。在Windows 2000、XP、Vista和Windows 7中使用了更先进的NTLMv2之前,这是唯一可用的版本。这些新的操作系统虽然可以支持使用LM哈希,但主要是为了提供向后兼容性。不过在Windows Vista和Windows 7中,该算法默认是被禁用的。本节将介

  • 8.1 密码在线破解 为了使用户能成功登录到目标系统,所以需要获取一个正确的密码。在Kali中,在线破解密码的工具很多,其中最常用的两款分别是Hydra和Medusa。本节将介绍使用Hydra和Medusa工具实现密码在线破解。 8.1.1 Hydra工具 Hydra是一个相当强大的暴力密码破解工具。该工具支持几乎所有协议的在线密码破解,如FTP、HTTP、HTTPS、MySQL、MS SQL、O

  • 1.1. cirtus_lpr_sdk 1.1.1. SDK接口说明 1.2. android_demo Rokid Plate Recognition SDK and demo project. Author Email cmxnono cmxnono@rokid.com 1.1. cirtus_lpr_sdk Version:1.0 1.1.1. SDK接口说明 初始化 public long

  • 输入格式 第一行包含两个空格分隔的整数,分别表示n(整数的个数)和d(您必须执行的左旋转个数)的值。第二行包含n个空格分隔的整数,描述数组初始状态的各个元素。 约束 1<=n<=10^5 1<=d<=n 1<=ai<=10^6 示例输出 当我们执行d=4次左旋转时,数组将经历以下变化顺序: [1,2,3,4,5]-->[2,3,4,5,1]-->[3,4,5,1,2]-->[4,5,1,2]-->

  • 问题:对一组没有重复的数字进行乱序。 答: 我的问题:Math.floor(Math.random()*n)你从数组的长度中得到一个随机索引。我不明白,这个代码不能重复吗?假设长度是3。公式不能得到2的索引和另一个2的索引,从而产生重复索引。有人能澄清一些我误解的事情吗?谢谢。Math.random自动撤回已经使用的索引吗?