前言
01算法题。
1 给定一个无序的数组,找出数组在排序之后,相邻元素之间的最打差值。如果数组元素个数小于2,则返回0
题解
``
function findMax(arr){
if(arr.length < 2){
return 0
}
arr.sort() // 排序 每个浏览器的sort方法不同,chrome默认的是快排+插入,相对较快
let result = 0
for(let i = 1;i<arr.length;i++){
let differ = arr[i] - arr[i-1]
if(differ > result){
result = differ
}
}
return result
}
`` 复杂度: O(NlogN + N)
2 给定两个数组,编写一个函数来计算他们的交集,且输出值唯一
题解
leetcode 349. 两个数组的交集
``
var intersection = function(nums1, nums2) {
let res = []
let s1 = new Set(nums1)
let s2 = new Set(nums2)
s1.forEach(item => {
if (s2.has(item)) {
res.push(item)
}
})
return res
};
``
```
var intersection = function(nums1, nums2) {
let l1 = nums1.length
let l2 = nums2.length
let minArr = nums1
let maxArr = nums2
if(l1>l2){
minArr = nums2
maxArr = nums1
l1 = minArr.length
l2 = maxArr.length
}
let obj = Object.create(null)
minArr.forEach(item=>{
obj[item] = true
})
let result = []
maxArr.forEach(item=>{
if(obj[item]){
result.push(item)
obj[item] = false
}
})
return result
};
```
3 输入一个正数n,输出所有和为n连续正数序列

面试题57 - II. 和为s的连续正数序列
var findContinuousSequence = function(target) {
let res = [];
let i = 1; // i 代表起始位置
let j = 1; // j 代表加到的位置
let sum = 0; // 和
while (i <= target/2) {
// 大于一半的时候,往后加没意义了,因为,如10的一半5,数到5再去加6肯定大于10
if (sum < target) sum += j++; // 小于target的时候继续 +
else if (sum > target) sum -= i++;
// 大于target的时候sum -起始位置的值,且i++ 则代表起始位置+1省去了计算i+1 到j的值
else
{
let temp = new Array(j-i);
for (let k = i; k < j; k++)
{
temp[k-i] = k;
}
res.push(temp);
sum -= i++;
sum += j++;
}
}
return res
};
4 设计一个promise实例随机生成一个值n,三秒后输出,n小于0.5使用then,其他使用异常
let p = new Promise((resolve,reject)=>{
let n = Math.random() // 生成的值是 (0,1]
setTimeout(()=>{
n >= 0.5? reject(n):reslove(n)
},3000)
})
p.then((n)=>{
console.info(n)
}).catch((n)=>{
console.error(n)
})
5. 搜索高亮
使用v-html
<ul >
<li v-for="item in data" :key="item" v-html="searchFn(item,searchText)"></li>
</ul>
data:['abc', 'ab' ,'123ad']
searchText: 'ab'
searchFn(item,searchText){
const rp = `<span style="color: yellow">${searchText} <span>`
const re = new RegExp(searchText, 'g');
return item.replace(re,rp)
}
6.设计进度条
``
<div style="postion:realtive;height:16px;border-radius: 8px;background: gray;">
<div style="color:white;text-align:right;postion:absloute;top: 0px;left: 0px;bottom: 0px; border-radius:8px;"
:style="{ width: width +'%'}">
%
</div>
</div>
data(){
return{
width: 70
}
}
``