小红书暑期实习笔试

第一题字符串解密,签到题

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

(async () => {
    // Write your code here
    let str = Array.from(await readline());
    const m = {};
    for (let i = 0; i < 26; i++) {
        const code = i < 3 ? 120 + i : 94 + i;
        m[String.fromCharCode(97 + i)] = String.fromCharCode(code);
    }
    // console.log(m);
    console.log(str.map((c) => m[c]).join(""));
})();

第二题k排序没思路,直接返回不在最终位置的数字数量除以k,过73%

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

(async () => {
    // Write your code here
    let T = (await readline()) * 1;

    while (T !== 0) {
        let [n, k] = (await readline()).split(" ").map((v) => v * 1);

        let arr = (await readline()).split(" ").map((v) => v * 1);
        let res = 0;
        for (let i = 0; i < n; i++) {
            if (arr[i] != i + 1) {
                res++;
            }
        }
        if (res % k !== 0) {
            console.log(parseInt(res / k) + 1);
        } else {
            console.log(res / k);
        }

        T--;
    }
})();

第三题数组操作,看起来没难度但是只过了82%。。。不知道怎么优化

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

(async () => {
    // Write your code here
    let N = (await readline()) * 1;
    let arr = (await readline()).split(" ").map((v) => v * 1);
    let M = (await readline()) * 1;
    let L = (await readline()).split(" ").map((v) => v * 1);
    let R = (await readline()).split(" ").map((v) => v * 1);
    let modes = Array.from(await readline());
    let paramX = (await readline()).split(" ").map((v) => v * 1);

    for (let i = 0; i < M; i++) {
        const mode = checkMode(modes[i]);
        const X = paramX[i];
        for (let j = L[i]-1; j < R[i]; j++) {
            arr[j] = mode(arr[j], X);
        }
    }
    console.log(arr.join(" "));

    function checkMode(mode) {
        if (mode === "|") {
            return (n, X) => n | X;
        } else if (mode === "&") {
            return (n, X) => n & X;
        } else {
            return (n, X) => X;
        }
    }
})();

有没有大佬知道第二题到底怎么写的

#软件开发2023笔面经##前端##我的实习求职记录#
全部评论
从1开始最长递增序列长度x,(总长度-x) /k
2 回复
分享
发布于 2023-03-26 18:14 北京
第二题用栈,遍历数组,栈顶=数组对应元素-1的话进栈,否则count++,最后count/k就行了
1 回复
分享
发布于 2023-03-26 18:12 江苏
联想
校招火热招聘中
官网直投
第一题直接定义字典可以吗
点赞 回复
分享
发布于 2023-03-26 18:14 吉林
亏死了,结果少加了一个join(" "),一直报栈溢出错误
点赞 回复
分享
发布于 2023-03-26 18:40 湖北

相关推荐

选择题跳过。编程题三题T1&nbsp;签到,排序去重即可。T2&nbsp;问刚好等于x。考虑01背包(下标从1开始)。dp[i][j][k]表示到第i个数,总共选取了j个,k=0表示[1~i]都没多次操作(都没加倍)。k=1表示[1~i]存在加倍的情况,可能是i,也可能是之前的某次。列出状态转移方程:dp[i][j][0]&nbsp;=&nbsp;min(dp[i-1][j][0],&nbsp;dp[i-1][j-a[i]/2][0]+1)&nbsp;表示不选和选的情况。dp[i][j][1]&nbsp;=&nbsp;min(dp[i-1][j][1],&nbsp;dp[i-1][j-a[i]/2][1]+1,&nbsp;dp[i-1][j-a[i]][0]+1)&nbsp;表示不选、选择但是不多次操作、选择并多次操作的情况。最后输出min(dp[n][x][0],dp[n][x][1])即可,若为inf则输出-1.第一维可以优化掉,空间O(x),时间O(nx)。T3&nbsp;样例给的比较号是&amp;lt;和&amp;gt;这种,很神秘,最后发现直接改成都行。也考虑dp。先把等号去掉,那个不影响答案。假设有len个运算符dp[i][j]表示到第i个运算符右侧的数,选择j,所得到的方案数。如果第i个运算符是 >&nbsp;,说明右侧的数更小,则&nbsp;dp[i][j]&nbsp;=&nbsp;dp[i-1][j+1]&nbsp;+&nbsp;dp[i-1][j+2]&nbsp;+&nbsp;...&nbsp;+&nbsp;dp[i-1][m]如果第i个运算符是 初始化dp[0][1~m]&nbsp;=&nbsp;1,表示最左侧的数取任何数的方案数都是1最后对dp[len][1~m]求和即可。当然直接算会超时,毕竟要求和。实际上如果第i个运算符是 >,那么由于dp[i][j+1]&nbsp;=&nbsp;dp[i-1][j+2]&nbsp;+&nbsp;...&nbsp;+&nbsp;dp[i-1][m],因此dp[i][j]&nbsp;=&nbsp;dp[i][j+1]&nbsp;+&nbsp;dp[i-1][j+1]。同理如果第i个运算符是 由于i只用到2个,因此可以压缩一维到大小为2.最后空间复杂度O(2*m)&nbsp;=&nbsp;O(m),时间复杂度O(n*m)#笔试##小红书#
投递小红书等公司10个岗位
点赞 评论 收藏
转发
8 14 评论
分享
牛客网
牛客企业服务