今天面试遇到了下图的一个面试题,不知道有没有牛人用JS解答一下,感觉有思路,当时就是解不出来,回家试了试,输出的有问题
你题目的解答代码如下:
class RangeList {
constructor() {
this.arr = []
}
add(range) {
for (var i = range[0]; i < range[1]; i++) {
this.arr[i] = true;
}
}
remove(range) {
for (var i = range[0]; i < range[1]; i++) {
this.arr[i] = false;
}
}
print() {
var str = "Should display:";
var s = -1, i;
for (i = 0; i < this.arr.length; i++) {
if (s == -1 && this.arr[i])
s = i;
if (s != -1 && (!this.arr[i]))
{
str += " ["+s+","+i+"]";
s = -1;
}
}
if (s != -1)
str += " ["+s+","+i+"]";
console.log(str);
}
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
你有什么问题需要问
class RangList{
constructor() {
this.arr=[];
}
add(range){
console.log("add [" + range[0] + "," + range[1] + "]");
if (this.arr.length == 0){
this.arr.push(range);
}else{
var new_arry = [];
var added = false;
for(var i=0;i<this.arr.length;i++){
if (range[1] < this.arr[i][0]){
//console.log("branch1");
if (!added){
new_arry.push(range);
added = true;
}
new_arry.push(this.arr[i]);
}else if(range[0] > this.arr[i][1]){
//console.log("branch2");
if (i == this.arr.length - 1){
new_arry.push(this.arr[i]);
if (!added){
new_arry.push(range);
added = true;
}
}else{
new_arry.push(this.arr[i]);
}
}else{
//console.log("branch3");
if (!added){
new_arry.push([Math.min(range[0],this.arr[i][0]),Math.max(range[1],this.arr[i][1])]);
added = true;
}else{
var index = new_arry.length - 1;
new_arry[index][0] = Math.min(range[0],this.arr[i][0]);
new_arry[index][1] = Math.max(range[1],this.arr[i][1]);
}
}
}
this.arr = new_arry;
}
}
remove(range){
console.log("remove [" + range[0] + "," + range[1] + "]");
if (this.arr.length == 0){
return;
}else{
var new_arry = [];
var removed = false;
for(var i=0;i<this.arr.length;i++){
if (range[0]> this.arr[i][0] && range[1] < this.arr[i][1]){
//console.log("r branch1");
new_arry.push([this.arr[i][0],range[0]]);
new_arry.push([range[1],this.arr[i][1]]);
removed = true;
}else if(range[0] > this.arr[i][1] || range[1] < this.arr[i][0]){
//console.log("r branch2");
new_arry.push(this.arr[i]);
}else if(range[0] < this.arr[i][0] && range[1] > this.arr[i][1]){
//console.log("r branch3");
removed = true;
}else if(range[1] > this.arr[i][0] && range[1] < this.arr[i][1]){
//console.log("r branch4");
new_arry.push([range[1],this.arr[i][1]]);
}else if(range[0] > this.arr[i][0] && range[0] < this.arr[i][1]){
//console.log("r branch5");
new_arry.push([this.arr[i][0],range[0]]);
}else{
//console.log("r branch6");
new_arry.push(this.arr[i]);
}
}
this.arr = new_arry;
}
}
print(){
var result = "";
//console.log(this.arr);
for(var i=0;i<this.arr.length;i++){
result = result + "[" + this.arr[i][0] + "," + this.arr[i][1] + "]";
}
console.log(result);
}
}
var rl = new RangList();
rl.add([1,5]);
rl.print();
rl.add([10,20]);
rl.print();
rl.add([20,20]);
rl.print();
rl.add([20,21]);
rl.print();
rl.add([2,4]);
rl.print();
rl.add([3,8]);
rl.print();
rl.remove([10,10]);
rl.print();
rl.remove([10,11]);
rl.print();
rl.remove([15,17]);
rl.print();
rl.remove([3,19]);
rl.print();