10.02 lazada前端笔经

个人感受

真的就是体验感拉满。只有三道算法题,然后每道题都不难,都能做出来一部分,但是如果想ak的话还是需要很高的水平。而且题目都是基于js出的,真的感受到了是为前端出的卷子,不像其他公司:选择填空出后端题,或者干脆就后端前端一起做一样的算法题... 这次笔试里两道题目限制了语言是js,一题没限制,题目又说了要js。感觉不是同个人出的卷子。
做完之后感觉自己基础还是太差了,而且之前做题都是随遇而安,觉得自己做出来了就行,没想过在题目基础上对时间跟空间复杂度更进一步要求。而且自己题目刷太少了...

第一题 大数相加 60% 力扣原题 415

题目上写了要求只用js,不过答题的时候可以选择其他的语言。提交到力扣后更新了代码 现在可以100%过了...
输入:A:"123",B:"123"
输出:"246"
输入跟输出都是字符串 应该是怕数字太大溢出了
思路:用数组来做,数组的容量比数字的安全位数大。先把AB切成数组,然后把长的那个部分(A跟B长度可能不一样,不知道测试用例里有没有这样的,不过我是先考虑到了这点)加到res中。然后再从0位开始遍历数组,每次让temp=两个数组当前的和。如果大于10,就从尾部遍历res(具体逻辑看代码),小于10直接加入res尾部。
res中存的尽量是number类型的值 如果是string类型 拿出来的时候还得转。

function bigIntAdd( n1 ,  n2 ) {
    // write code here
    n1 = n1.split("")
    n2 = n2.split("")
    let res = []
    while(n1.length!=n2.length){
        if(n1.length>n2.length){
            res.push(parseInt(n1.shift()))
        }else{
            res.push(parseInt(n2.shift()))
        }
    }
    // n1.length==n2.length
    // res[number]
    for(let i=0;i<n1.length;i++){
        let temp = parseInt(n1[i])+parseInt(n2[i])
        if(temp>=10){
            // temp==10
            if(res.length==0){
                res.push(1)
                res.push(temp%10)
            }else{
            for(let j=res.length-1;j>=0;j--){
                let now = res[j]+1
                if(now>=10){
                    if(j==0){
                        // 极端情况
                        res.unshift(1)
                        res[j+1] = (now)%10
                        res.push(temp%10)
                        break;
                    }else{
                        res[j] = (now)%10
                        continue;
                    }
                }else{
                    res[j] = now
                    res.push(temp%10)
                    break;
                }

            }
        }
        }else{
            res.push(temp)
        }
    }
    return res.join("")
}

第二题 除本身外的数组乘积 50% 剑指 Offer 66. 构建乘积数组

顾名思义 除本身外的数组其他数的乘积。看输入输出就知道意思。这个题有两个提升点,应该分别代表了不同的通过用例把。

  1. 要求时间复杂度O(n)
  2. 空间复杂度O(1)

限制语言js跟ts
输入:[1,2,3,4] 输出[24,12,8,6]
思路:只想到了用数组的map方法,复杂度太高。不如力扣方法

var constructArr = function (arr) {
    let res = [];

    let tmp = 1;
    for (let index = 0; index < arr.length; index++) {
        res[index] = tmp;
        tmp *= arr[index];
    }

    tmp = 1;
    for (let index = arr.length - 1; index >= 0; index--) {
        res[index] *= tmp;
        tmp *= arr[index];
    }

    return res;
};

第三题 中位数 100%

两个正序数组n和m 求出中位数。要求时间复杂度O(log(m+n))
输入:[1,3],[2] 输出:[2]
思路:合并之后排序后取中间。感觉正确解法应该不是这样,应该是用分治。不过我随便写了下居然全过了,就懒得改了T.T 懒狗一枚了属于是。

function findMedianSortedArrays( nums1 ,  nums2 ) {
    // write code here
    let temp = nums1.concat(nums2).sort()
    return temp.length%2===0?(temp(temp.length/2)+temp(temp.length/2 -1))/2:temp[Math.floor(temp.length/2)]
}
#Lazada校招##阿里lazada##笔试#
全部评论
lazada的秋招在哪里投啊
点赞 回复 分享
发布于 2022-10-02 21:50 安徽

相关推荐

11-07 13:31
怀化学院 Java
勇敢牛牛不怕难:又疯一个
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
7
4
分享
牛客网
牛客企业服务