为了账号安全,请及时绑定邮箱和手机立即绑定

几道挺不错的面试题目,一起看看吧。

2019.03.18 21:34 942浏览

1、判断一个字符串中出现次数最多的字符,统计这个次数。

比如说这个:

dhoaisdjopascmj;lascnjvoaidhfsvo;ascdj;asj

代码实现如下:

function mostTimesChar (string) {
    let map = {}, res = 0;

    for(let i = 0; i < string.length; i ++) {
        map[string[i]] = typeof map[string[i]] === 'undefined' ? 1 : map[string[i]] + 1;
    }

    for(let i in map) {
        res = res > map[i] ? res : map[i];
    }
    return [map, res];
}
console.log(mostTimesChar("dhoaisdjopascmj;lascnjvoaidhfsvo;ascdj;asj"));

基本的思路是这样:遍历这个字符串,并将每一个字符存入一个对象中,对象中已有该字符则值+1,没有则为1,此时时间复杂度为O(n),再遍历这个对象,由于该对象的key是字符,value是个数,这样将对象中的value一一比对大小,即可输出最大的数。O(n) + O(n)的时间复杂度在n趋于无穷时仍为O(n)。

2、有两个数组arr0和arr1,里面的值均为number,求这两个数组的中位数。

let arr0 = [1,2,3,4,5,6,7,8,9,10,11,12,13],
    arr1 = [12,14,16,18];

解答如下:

const dorseyHandle = (arr0, arr1) => {

    let arr = arr0.concat(arr1);

    arr.sort((a,b) => a - b);

    let center = Math.floor(arr.length / 2);

    return arr.length % 2 ? arr[center] : (arr[center - 1] + arr[center]) / 2;
}
dorseyHandle(arr0, arr1);

这种方式比较粗暴的把两个数组进行合并,再排序,取中间值。虽直观但效率会较低。

3、 实现一个类型判断函数,如[1,2]返回array,'123’返回string,123返回number

实现如下:

 const getType = obj => {
 
	//还记得上篇提到的正则么?
     return Object.prototype.toString.call(obj).match(/(?<=\s).*?(?=\])/g)[0].toLowerCase(); 
 }

4、判断字符串是否是这样组成的,第一个必须是字母,后面可以是字母、数字、下划线,总长度为5-20

还是一串正则搞定。

const strRule = str => /^[a~zA~Z]{1}[\w]{4, 19}$/.test(str);

console.log(strRule("21djpoasdjxpoas"));

5、数据处理,假设现在需要对以下JSON数据按时间进行排序,你会怎么做。

        let data = [
            {
                time: "2019-03-18 23:44:32",
                detail: "公安部破获一起重大事件..."
            },
            {
                time: "2019-02-18 17:44:12",
                detail: "公安部破获一起重大事件..."
            },
            {
                time: "2018-07-21 20:44:08",
                detail: "公安部破获一起重大事件..."
            },
            {
                time: "2019-03-18 22:14:32",
                detail: "公安部破获一起重大事件..."
            },
            {
                time: "2019-02-11 10:54:32",
                detail: "公安部破获一起重大事件..."
            },
            {
                time: "2018-02-09 09:44:32",
                detail: "公安部破获一起重大事件..."
            }
        ]

实现的代码如下:

      const dataRank = data => {

          let times = [],
              median = {};

          data.map(item => {
              let time = new Date(item.time).getTime();
              times.push(time);
              median[time] = item;
          });

          times.sort((a, b) => b - a);

          return times.map(item => {
              return median[item];
          })
      }

其实这个是用map将时间映射成时间戳,排序后再重新映射回去。较传统for循环遍历较简单一些。

点击查看更多内容

本文首次发布于慕课网 ,转载请注明出处,谢谢合作

3人点赞

若觉得本文不错,就分享一下吧!

评论

相关文章推荐

正在加载中
意见反馈 邀请有奖 帮助中心 APP下载
官方微信

举报

0/150
提交
取消