给定一个只有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)