小编Raz*_*rJs的帖子

O(n)时间中的(1,2,3)个数字的排序数组

给定一个只有3个唯一数字(1、2、3)的数字列表,请以O(n)时间对列表进行排序。另外,使用常量空间O(1)对数组进行排序。

例:

Input: [3, 3, 2, 1, 3, 2, 1]

Output: [1, 1, 2, 2, 3, 3, 3]

在这里,我提出的解决方案(没有O(1)空间,并且在数组中没有空的空间..):此函数的作用很简单..在所有元素均为2的情况下,将排列的大小增加了一倍; 然后它返回其先前的长度(current / 2)对其元素进行排序..如果为1,则不执行任何操作,如果找到2,则将其放入先前的最大长度+ 1,它增加变量len并消除元素,如果它是3,则推并删除该元素..则您在数组中有空位,并且不满足问题的要求,但它是O(n)。

function sort(list) {
    let len = list.length;
    list.length=len*2
    for(let i=0; i<list.length/2; i++){
        let n=list[i]
        if(n==2){
            list[len]=n
            delete list[i]
            len++
        }else if(n==3){
            list.push(n)
            delete list[i]
        }
    }
    return list
}

console.log(sort([1,2,3,2,1,1]))
Run Code Online (Sandbox Code Playgroud)

javascript sorting algorithm big-o

1
推荐指数
1
解决办法
183
查看次数

标签 统计

algorithm ×1

big-o ×1

javascript ×1

sorting ×1