解一位群友的阿里系算法面试题

2020-10-09  本文已影响0人  喜剧之王爱创作

之前在群里聊得很好的一位群里,去了阿里,在交流之后,他抛出了他面试时遇到的几道算法题,这里我拿出两道来做一个解答,算法世界,千变万化,结果只代表个人当前思路,做抛砖引玉~

  1. 实现一个函数,一秒钟打印1,两秒钟打印2....

这无疑是一到考验异步算法的能力,在js中,异步就是那么几种,就看你怎么应用能写出更优秀的代码了,我看到这个题后,第一下就想到了generatorasync/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)

打在控制台看看结果吧!

  1. 实现一个函数, 输入字符串 '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'))

如果你有更好的答案,欢迎到评论区留言哦~

上一篇 下一篇

猜你喜欢

热点阅读