首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用笛卡尔树多次将数组从索引I反转到索引j?

如何使用笛卡尔树多次将数组从索引I反转到索引j?
EN

Stack Overflow用户
提问于 2014-10-11 08:07:51
回答 2查看 312关注 0票数 1

假设我有一个给定的数组A,现在有多个表单操作

代码语言:javascript
复制
reverse i,j // means reverse the array Ai..j inclusive

代码语言:javascript
复制
print i,j

打印数组Ai..j。

例如,

代码语言:javascript
复制
A = 6 9 1 10 4 15 9
reverse 2,3
A = 6 1 9 10 4 15 9
reverse 3,6
A = 6 1 15 4 10 9 9
print 1,4

6 1 15 4

我听说笛卡尔树可以做到这一点。因此,我一直在阅读博客这里,但我仍然不明白如何使用笛卡儿树来实现它,关键和价值应该是什么,以及我们应该如何实现?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-11 08:25:52

在这个问题中,应该使用带有隐式键的treap(又名笛卡儿树)(根本没有键,而是按正确的顺序合并它们)。节点的值是它表示的数组元素。要实现反向操作,您可以为每个节点维护反向标志(如果必须反转,则为true,否则为false ),并将其延迟推送(在此处推送意味着交换节点的左、右子节点,并在其子节点中翻转标志的值)。

推送的伪代码:

代码语言:javascript
复制
void push(Node node)
    if node.flag
        swap(node.left, node.right)
        if node.left != null
            node.left.flag = not node.left.flag
        if node.right != null
            node.right.flag = not node.right.flag
票数 2
EN

Stack Overflow用户

发布于 2022-07-22 21:19:27

下面是一些您可以使用的示例。

代码语言:javascript
复制
console.log(
  Array.from({length:1}).reduce((acc,item)=>acc.reverse(),[1,2,3]),
  Array.from({length:2}).reduce((acc,item)=>acc.reverse(),[1,2,3]),
  Array.from({length:3}).reduce((acc,item)=>acc.reverse(),[1,2,3])
)

console.log(  Array.from({length:1}).reduce((acc,item)=>acc.reverse(),Array(...'love')).join(''),  Array.from({length:2}).reduce((acc,item)=>acc.reverse(),Array(...'love')).join(''),  Array.from({length:3}).reduce((acc,item)=>acc.reverse(),Array(...'love')).join('')
)

const reverseXTimes = (word, xTimes)=> Array.from({length:xTimes}).reduce((acc,item)=>acc.reverse(),Array(...word)).join('')

console.log(
  reverseXTimes('passion',1),
  reverseXTimes('passion',2),
  reverseXTimes('passion',3),
)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26312504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档