Javascript 这个递归函数是二次时间复杂度吗?

Javascript 这个递归函数是二次时间复杂度吗?,javascript,algorithm,data-structures,Javascript,Algorithm,Data Structures,下面代码的目的是获取连续的重复字符并移动它们,使它们不再重复。i、 e.:“aaabbcc”->“abcacba”如果不可能,则返回None function sortEvo(str, result) { result = result || [] str = str.split('').sort() if (str.length === 0) return result.join('') co

下面代码的目的是获取连续的重复字符并移动它们,使它们不再重复。i、 e.:“aaabbcc”->“abcacba”如果不可能,则返回None

    function sortEvo(str, result) {
        result = result || []

        str = str.split('').sort()

        if (str.length === 0)
            return result.join('')

        const arrLen = str.length - 1
        const resLen = result.length - 1

        if (str[arrLen] !== result[resLen]) 
            result.push(str.pop())
        else if (str[arrLen] !== result[0])
            result.unshift(str.pop())
        else if (str[0] !== result[resLen])
            result.push(str.shift())
        else return 'None'

        return sortEvo(str.join(''), result) 
    }

乍一看,它看起来是线性时间,但我不确定,因为shift()和unshift()使它在数组中迭代以重新索引元素。

对于线性时间复杂性,您可以使用一个对象来为数组保留
索引

在循环中检查
索引中是否存在字符,如果不存在,则为目标数组创建一个或递增索引。然后将此字符添加到目标数组中

最后返回平坦和合并的数组

函数最大距离(字符串){
var指数={},
部分=[];
for(字符串的常数c){
如果(索引中的c)索引[c]+;
else指数[c]=0;
设i=指数[c];
如果(!parts[i])parts[i]=[];
第[i]部分。推(c);
}
返回零件。展开()。连接(“”);
}

log(maxDistance('aaabbcc'))
对于线性时间复杂度,您可以使用一个对象来保存数组的
索引

在循环中检查
索引中是否存在字符,如果不存在,则为目标数组创建一个或递增索引。然后将此字符添加到目标数组中

最后返回平坦和合并的数组

函数最大距离(字符串){
var指数={},
部分=[];
for(字符串的常数c){
如果(索引中的c)索引[c]+;
else指数[c]=0;
设i=指数[c];
如果(!parts[i])parts[i]=[];
第[i]部分。推(c);
}
返回零件。展开()。连接(“”);
}

log(maxDistance('aaabbcc'))
移位
取消移位
?是的,也许,也许。没关系
str.split(“”).sort()
str.join(“”)
肯定有线性运行时(或者在
sort
的情况下更糟),这使得整个
sortEvo
运行时是二次的。我留下了一个答案,但仔细检查您的问题可能并不是您想要的。你能帮我查一下吗,这样我就可以编辑了?很有意义,谢谢@Bergi为什么不从开始和结束使用两个索引,并省略对给定数据的变异?@NinaScholz你能给我举个例子吗?
shift
unshift
?是的,也许,也许。没关系
str.split(“”).sort()
str.join(“”)
肯定有线性运行时(或者在
sort
的情况下更糟),这使得整个
sortEvo
运行时是二次的。我留下了一个答案,但仔细检查您的问题可能并不是您想要的。你能帮我查一下吗,这样我就可以编辑了?很有意义,谢谢@Bergi为什么不从开始和结束使用两个索引,并省略对给定数据的变异?@NinaScholz,你能给我举个例子吗?好主意,但它没有涵盖太多边缘情况,仍然让我印象深刻!很棒的主意,但它并没有涵盖太多的边缘情况,仍然给我留下深刻印象!