像往常一样,睡前点开学习交流群,今天群里居然没在摸鱼,在讨论面试题,一下子就提起了我的兴趣,蹲守了一下,发了三个面试题,我就试着尝试了一下。
1
题
我的解
let arr = [4, 5, 5, 3, 2, 8, 7];
let arr2 = [60, 90, 80, 110, 120, 90, 100, 90, 100, 100];
const fn = function(arr) {
let min = arr[arr.length - 1];
let result = [];
arr.reverse().forEach((item, index) => {
if (item <= min) {
min = item;
result.push(arr.length - 1 - index);
}
});
return result.reverse();
};
console.log(fn(arr));
console.log(fn(arr2));
2.
题
我的解
const arr = [1, 2, 3, 4, 1, 2];
const obj2 = {
value: 0,
child: [],
};
const fn = function(arr, obj) {
if (arr.length >= 2) {
obj.child.push({ value: arr[0], child: [] });
obj.child.push({ value: arr[1], child: [] });
fn(arr.slice(2, arr.length), obj.child[0]);
fn(arr.slice(3, arr.length), obj.child[1]);
} else if (arr.length === 1) {
obj.child.push({ value: arr[0], child: [] });
fn(arr.slice(2, arr.length), obj.child[0]);
}
};
fn(arr, obj2);
console.log(obj2);
const arr2 = [];
const fn2 = function(obj2, sum) {
sum = sum + obj2.value;
if (obj2.child.length === 1) {
fn2(obj2.child[0], sum);
} else if (obj2.child.length === 2) {
fn2(obj2.child[0], sum);
fn2(obj2.child[1], sum);
} else {
arr2.push(sum);
}
};
fn2(obj2, 0);
console.log(arr2.sort()[arr2.length - 1]);
3.
题
我的思路
当你给我这个问题,我想到的是查询字符串中的公共最长子串
从而得到修改内容的起始坐标或者结束坐标
然后再截取0到起始坐标或者结束坐标到字符串最大长度的一个字符串出来
再进行一次查询公共最长子串
这样你就可以得到修改内容的起始和结束坐标了
然后把这一段截出来就是你修改的内容了