JD前端笔试题代码(18%/91%)

现在应该交完卷了吧,估计和东哥当不了兄弟~

第一题(18%):
function resolve(str) {
    let count = 0;
    let isCaps = false;
    const len = str.length;
    for (let i = 0; i < len; i += 1) {
        if (/[a-z]/.test(str[i])) {
            if (!isCaps) {
                count++;
                continue;
            } else if (i + 1 < len && /[a-z]/.test(str[i + 1])) {
                isCaps = false;
            }
            count += 2;
        } else {
            if (isCaps) {
                count++;
                continue;
            }
            if (i + 1 < len && /[A-Z]/.test(str[i + 1])) {
                isCaps = true;
            }
            count += 2;
        }
    }
    return count;
}

while (n = readInt()) {
    if (!n) break;
    const str = read_line();
    print(resolve(str));
}
第二题(91%
function resolve(nameArr) {
    const countCache = {};
    let len = nameArr.length;
    if (len === 0) return [];
    let firstName;
    for (let i = 0; i < len; i += 1) {
        firstName = nameArr[i].split(' ')[0];
        if (!countCache[firstName]) {
            countCache[firstName] = {
                value: [{
                    name: nameArr[i],
                    index: i
                }],
                count: 0
            };
        } else {
            // index用于计数相同时的排序
            countCache[firstName].value.push({
                name: nameArr[i],
                index: i
            });
            countCache[firstName].count += 1;
        }
    }

    const sortedFirstNameList = Object.keys(countCache).sort((firstName1, firstName2) => {
        return countCache[firstName2].count - countCache[firstName1].count;
    });


    let currentMaxFirstName = sortedFirstNameList[0];
    let currentMaxCount = countCache[currentMaxFirstName].count;
    let currentMaxNameArr = countCache[currentMaxFirstName].value;
    len = sortedFirstNameList.length;
    // console.log(currentMaxNameArr);
    let result = [];
    for (let i = 1; i < len; i += 1) {
        currentMaxFirstName = sortedFirstNameList[i];
        // 直接放进数组
        if (currentMaxCount > countCache[currentMaxFirstName].count) {
            currentMaxNameArr.sort((item1, item2) => item1.index - item2.index);
            result = result.concat(currentMaxNameArr.map(item => item.name));
            // 下一个姓名列表
            currentMaxNameArr = countCache[currentMaxFirstName].value;
            currentMaxCount = countCache[currentMaxFirstName].count;
        } else {
            // 合并计数相同的姓名列表
            currentMaxNameArr = currentMaxNameArr.concat(countCache[currentMaxFirstName].value);
        }
    }
    // 由于最后一次currentMaxNameArr可能还没放进result,在这里补上
    currentMaxNameArr.sort((item1, item2) => item1.index - item2.index);
    result = result.concat(currentMaxNameArr.map(item => item.name));

    return result;
}

while (true) {
    const nameArr = [];
    while (line = read_line()) {
        nameArr.push(line);
    }
    print(resolve(nameArr).join('\n'));
}



#京东##笔试题目##前端工程师#
全部评论
可以了,强
点赞 回复 分享
发布于 2019-08-24 21:08
主要是这句,把计数相同的放到一个数组里按照原index排序 currentMaxNameArr.sort((item1, item2) => item1.index - item2.index);
点赞 回复 分享
发布于 2019-08-24 21:08
我的第二题也是91% dic = {} for i in data:     if i[0] not in dic:         dic[i[0]] = 1     else:         dic[i[0]] +=1 dic2 = {} for key, value in enumerate(dic):     if dic[value] not in dic2:         dic2[dic[value]] = []         dic2[dic[value]].append(value)     else:         dic2[dic[value]].append(value) # print(dic2) m = max(dic2) while m > 0:     if m in dic2:         for i in data:             if i[0] in dic2[m]:                 print(' '.join(i))     m -= 1 是不是什么边界没考虑?
点赞 回复 分享
发布于 2019-08-24 21:10
第二题输入是怎么读入的?
点赞 回复 分享
发布于 2019-08-24 21:13

相关推荐

评论
点赞
9
分享

创作者周榜

更多
牛客网
牛客企业服务