algorithm - 用于快速检索中间元素的数据结构
问题描述
我需要解决一个可以左右插入的问题。然后从数组中间的数据中提取。
我已经尝试使用链表来解决这个问题。然而,这种方法太慢而无法被接受为解决方案。
如果我需要在列表的开头和结尾快速插入以及快速检索中间元素,你会建议我使用什么数据结构?
这是我已经尝试过的代码:
private static void middleQueue(int loopLength, String[] commandsArray) {
LinkedList<String> linkedList = new LinkedList<>();
int counterSize = 0;
for (int i = 0; i < commandsArray.length; i++) {
if(commandsArray[i].equals("R")){
linkedList.add(commandsArray[i+1]);
i++;
counterSize++;
}
else if(commandsArray[i].equals("L")){
linkedList.addFirst(commandsArray[i+1]);
i++;
counterSize++;
}
else if(commandsArray[i].equals("E")){
if((linkedList.size() & 1) == 0)
System.out.println(linkedList.remove((counterSize / 2)-1));
else
System.out.println(linkedList.remove((counterSize / 2)));
counterSize--;
}
}
}
解决方案
先取3个指针,中间,最后一个指针。那么有2种情况:
如果您从第一个答案添加。您需要将中间指针移到左侧,然后移到当前位置。
如果您从最后一个答案添加。您只需将中间指针增加到其下一个。
推荐阅读
- javascript - 子菜单点击事件没有被触发
- python - 在 C 和 python 之间传递变量和字符串
- php - 如何使这个 PHP 脚本运行得更快/异步?
- bash - sed 命令的 bash 等效项
- javascript - 在 PostgreSQL 中将 JSON 格式转换为关系数据?
- symfony - 找不到 Symfony 4 订阅服务注入
- python - 部分填充椭圆
- c - 错误:格式 '%lu' 需要一个匹配的 'long unsigned int' 参数 [-Werror=format=]
- xcode - 下载的图像显示为超大
- javascript - 无法在 angular6 中设置数组属性