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. 构建乘积数组
顾名思义 除本身外的数组其他数的乘积。看输入输出就知道意思。这个题有两个提升点,应该分别代表了不同的通过用例把。
- 要求时间复杂度O(n)
- 空间复杂度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##笔试#