面试字节 被算法题给干懵拉

前言

大家好,我是扯蛋蛋,今天我给大家来几道字节的算法题,这个是我同学面试字节的时候,告诉我的题目。📢最近准备春招啦了,所以整理了一些前端高频大厂面试题,分享给大家,如有问题欢迎留言指正,面试专栏我会长期更新,欢迎大家点赞🤞、收藏📌,关注➕,感谢!

2024 高频前端面试题汇总之CSS篇(一)

2024 高频前端面试题汇总之CSS篇(二)

2024 高频前端面试题汇总之js篇(一)

2024 高频前端面试题汇总之js篇(二)

来废话不多说,上菜

数组的去重

想必大家看到这个题目一看哦,这个简直不是白给嘛,易如反掌呀 ,易如反掌呀 这个要往下看,我们开始从小怪开始 慢慢的打Boss

ini 复制代码
  arr = [1, 2, 3, 5, 8, 7, 4, 5, 4, 7, 5] //  这个数组去重 
 // 第一时间是不是想到俩个for循环是不是就完事了,这个可是字节可没那么简单
  arr = [1, 2, 3, 5, 8, 7, 4, 5, 4, 7, 5]
  const a = [...new Set(arr)]
   console.log(a)//[1, 2, 3, 5, 8, 7, 4]

用到 new Set() 方法加上解构这个不嘎嘎香嘛,比用俩for好用,这个可是字节可没那么简单,你写到这里面试官一定会问你es6里面的Set和解构 在升级一下

javascript 复制代码
let arr = [1, 1, '2', 3, 1, 2,
  { name: '张三', id: { n: 1 } },
  { name: '张三', id: { n: 1 } },
  { name: '张三', id: { n: 2 } },
]
const arr1 = arr.map((item,) => {
  return JSON.stringify(item)
})
const arr2 = [...new Set(arr1)]
console.log(arr2)

这个先把数组的每一个项转变成字符串的形式,在用 用到 new Set() 方法加上解构,就能解决这个问题了,看到这里你以为很快就能解决面试官了,面试官在来一句,你能不能手动来写一个函数,来去重能,这个就是大家所说的,面试造火箭,工作拧螺丝,那就开始吧,开始我们手搓之旅

javascript 复制代码
function uniqueArr(arr) {
  let res = []
  for (let item of arr) {
    let isFind = false
    for (let resItem of res) {
      if (equal(item, resItem)) {
        isFind = true
        break;
      }
    }
    if (!isFind) res.push(item);
  }
  return res
}
// 这个是功能函数 判断俩个数组的值是否是数字还是对象
function equal(v1, v2) {
  if ((typeofv1 === 'object' && v1 !== null) && (typeof v2 === 'object' && v2 !== null)) { // 都是引用类型
    if (Object.keys(v1).length !== Object.keys(v2).length) return false
    //  用Object.keys()这个函数是把对象的key存在一个数组在进行返回来判断俩对象是否相等
    for (let key in v1) {
      if (v2.hasOwnProperty(key)) {
     // 判断一层函数的值,不是的用递归的思想在来进行调用函数
        if (!equal(v1[key], v2[key])) {
          return false
        }
      } else {
        return false
      }
    }
    return true
  } else {
    return v1 === v2
  }
}
console.log(uniqueArr(arr))

这个就是面试官想要的方法,也能让面试官对你刮目相看,三种方法都写在这里了,这个offer不给你,给谁呢

如何做到整数相加

这个算法题想必大家都碰到过吧,碰到了也可以在看一次就当温习一次了,这个大家都知道浏览器最大的计算值,但是超过最大值怎么计算的呢 接下来我来一一破解

ini 复制代码
let n = 90000000000000000
let m = 71542122// 定义两个数字
 
function sum(num1, num2) {
 num1 = num1.toString();
 num2 = num2.toString();
 let result = '';
 // 结果值
 let carry = 0;
 // 进位值 
 let maxLength = Math.max(num1.length, num2.length);
 for (let i = 1; i <= maxLength; i++) {
     const digit1 = parseInt(num1[num1.length - i] || 0);
     const digit2 = parseInt(num2[num2.length - i] || 0);
     const sum = digit1 + digit2 + carry;
     carry = Math.floor(sum / 10);
     result = (sum % 10) + result;
 }
 if (carry > 0) {
     result = carry + result;
 }
 // 这个判断最后俩个值 加起来是否大于10
 return result;
}
sum(n, m)
console.log(sum(n, m))

这个方法就是把数字转换为字符串,在用下标转换为数字加起来,在转换为字符串,就这样一一的加起来 想必,大家都看懂了吧 没看懂的可以评论。

如觉得本文对你有帮助的话,欢迎点赞❤❤❤,写作不易,持续输出的背后是无数个日夜的积累,您的点赞是持续写作的动力,感谢支持!

相关推荐
怕浪猫14 小时前
外包和大厂的前端代码,差在凌晨三点
前端·面试·github
徐小夕14 小时前
花了3个月,我们做了一款 AI 版的“飞书文档”
前端·算法·github
Robert--cao14 小时前
移动底盘与机械臂联合规划:开源算法与工程实现
算法
小豆庄15 小时前
Mac 上给视频人脸打码:本地工具的依赖、追踪与推理管线
算法·视觉检测·视频·敏捷流程·纹理贴图
星夜离尘5616 小时前
MATLAB 工程实验:从相邻块均值手写重叠 Allan 偏差,数清有效项
算法·matlab·均值算法
酷炫码神16 小时前
Day 10|Pinia 状态管理:把散落在各组件的数据,收进一个全局仓库
android·开发语言·javascript
y1su18 小时前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
residual_fan18 小时前
船用柴油机动态机动工况故障诊断:控制感知仿射网络(CAAN)的技术实现
人工智能·算法·数据挖掘·数据分析
酷炫码神18 小时前
Day 8|Vue3 响应式:告别手动操作 DOM,让数据驱动界面
javascript·vue.js·ecmascript
其实防守也摸鱼19 小时前
Cylab在线靶场——CTF中的通用技能
linux·数据库·学习·算法·靶场·ctf·学习网络安全