【发布时间】:2020-01-06 14:55:04
【问题描述】:
我有一个要求,我必须在不更改数组中“#”的索引的情况下反转数组,如下例所示:
- 数组
[18,-4,'#',0,8,'#',5]应该返回[5, 8, "#", 0, -4, "#", 18],这里的数字应该颠倒,不包括'#',同时保持相同的索引。
我已尝试获得正确的输出,但似乎并非在所有情况下都是正确的: var arr = [18,-4,'#',0,8,'#',5]; // 给出的结果是正确的 var arr1 = [18,-4,0,'#',8,'#',5]; // 结果不正确
var reverse = function(numbers, start, end){
var temp = numbers[start];
numbers[start] = numbers[end];
numbers[end] = temp;
}
var flip = function(numbers) {
var start = 0;
var end = numbers.length-1;
for(var i=0;i<parseInt(numbers.length/2);i++) {
if(numbers[i] === '#') {
start = i+1;
end = numbers.length - i - i;
reverse(numbers, start, end);
} else if (numbers[numbers.length - i - 1] === '#') {
start = i;
end = numbers.length - i - 2;
reverse(numbers, start, end);
} else {
reverse(numbers, start, end);
}
}
return numbers;
}
var arr = [18,-4,'#',0,8,'#',5];
var arr1 = [18,-4,0,'#',8,'#',5];
console.log(flip(arr));
console.log(flip(arr1));
【问题讨论】:
标签: javascript arrays algorithm reverse