解一位群友的阿里系算法面试题
2020-10-09 本文已影响0人
喜剧之王爱创作
之前在群里聊得很好的一位群里,去了阿里,在交流之后,他抛出了他面试时遇到的几道算法题,这里我拿出两道来做一个解答,算法世界,千变万化,结果只代表个人当前思路,做抛砖引玉~
- 实现一个函数,一秒钟打印1,两秒钟打印2....
这无疑是一到考验异步算法的能力,在js中,异步就是那么几种,就看你怎么应用能写出更优秀的代码了,我看到这个题后,第一下就想到了generator
和async/await
,但考虑到async/await
会自动执行,而我决定使用计时器驱动执行,所以我决定使用generator
来完成,下面是我的代码
function* test (num) { // num为一共执行到几
for ( let i = 1; i <= num; i ++) {
yield console.log(i)
}
}
const general = test(10)
setInterval(() => {
general.next()
}, 1000)
打在控制台看看结果吧!
- 实现一个函数, 输入字符串 'aabbcca', 输出 [{a: 2, },{b: 2, },{c: 2,},{ a: 1}]
看到这道题,我没有想到什么新颖的方式,就是想着用遍历加标识的方式去做,下面是我的代码,思想也是比较简单
function test (str) {
const arr = str.split('')
const newArr = []
let num = 1
for (let i = 0; i < arr.length; i++) {
let newObj
let name
if (arr[i] === arr[i + 1]) {
num += 1
}
else {
newObj= {}
name = arr[i]
newObj[name] = num
num = 1
}
if (newObj) {
newArr.push(newObj)
}
}
return newArr
}
console.log(test('aaabbccaddddfd'))
如果你有更好的答案,欢迎到评论区留言哦~