前端算法题【持续更新】
实现 (5).add(3).minus(2) 功能
例: 5 + 3 - 2,结果为 6
冒泡排序如何实现,时间复杂度是多少, 还可以如何改进?
{1:222, 2:123, 5:888},请把数据处理为如下结构:[222, 123, null, null, 888, null, null, null, null, null, null, null]。
要求设计 LazyMan 类,实现以下功能。
LazyMan('Tony');
// Hi I am Tony
LazyMan('Tony').sleep(10).eat('lunch');
// Hi I am Tony
// 等待了10秒...
// I am eating lunch
LazyMan('Tony').eat('lunch').sleep(10).eat('dinner');
// Hi I am Tony
// I am eating lunch
// 等待了10秒...
// I am eating diner
LazyMan('Tony').eat('lunch').eat('dinner').sleepFirst(5).sleep(10).eat('junk food');
// Hi I am Tony
// 等待了5秒...
// I am eating lunch
// I am eating dinner
// 等待了10秒...
// I am eating junk food
代码解读
给定两个数组,写一个方法来计算它们的交集。
给定 nums1 = [1, 2, 2, 1],nums2 = [2, 2],返回 [2, 2]。
已知如下代码,如何修改才能让图片宽度为 300px ?注意下面代码不可修改。
<img src="1.jpg" style="width:480px!important;”>
代码解读
介绍下如何实现 token 加密
如何设计实现无缝轮播
a.b.c.d 和 a[‘b’][‘c’][‘d’],哪个性能更高?
随机生成一个包含十个整数的数组(例如 [2,\;10,\;3,\;4,\;5,\;11,\;9,\;9,\;8]),然后将该数组重新排列为另一个按照以下格式组织的数组:[[a_{{\text{min}}},\;a_{{\text{min}}+{\Delta}a},\;\ldots ,\;a_{{\text{max}}}}]
请阐述一种方法来实现字符的大写字母与小写字母互换。例如输入为 'AbC' 时输出应为 'aBc'。
开发一个字符串匹配算法,并在长度为n的字符串S中进行搜索定位是否存在长度为m的子串T;若发现匹配成功,则输出结果索引。
数组里面有10万个数据,取第一个元素和第10万个元素的时间相差多少
算法题「旋转数组」
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
输入: [1, 2, 3, 4, 5, 6, 7] 和 k = 3
输出: [5, 6, 7, 1, 2, 3, 4]
解释:
向右旋转 1 步: [7, 1, 2, 3, 4, 5, 6]
向右旋转 2 步: [6, 7, 1, 2, 3, 4, 5]
向右旋转 3 步: [5, 6, 7, 1, 2, 3, 4]
输入: [-1, -100, 3, 99] 和 k = 2
输出: [3, 99, -1, -100]
解释:
向右旋转 1 步: [99, -1, -100, 3]
向右旋转 2 步: [3, 99, -1, -100]
######打印出 1 - 10000 之间的所有对称数 例如:121、1331 等
周一算法题之「移动零」
给定一个整数列表nums,请实现一个算法将所有值为零的元素移动至列表末尾的同时,并保证原有非零元素之间的相对顺序不受影响。
输入数据为:[0, 1, 0, 3, 12]
经过算法处理后得到的结果列表为:[1, 3, 12, 0, 0]
特别说明:该算法必须在原始数据列表上进行操作,并且不允许预先生成新的列表空间;此外,请尽量优化算法的时间复杂度以减少运算次数。
请实现一个 add 函数,满足以下功能。
add(1); // 1
add(1)(2); // 3
add(1)(2)(3);// 6
add(1)(2, 3); // 6
add(1, 2)(3); // 6
add(1, 2, 3); // 6
如何禁掉 标签默认事件,禁掉之后如何实现跳转。
周一算法题之「两数之和」
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
开发convert方法以将原始列表转录为树形结构,并着重于优化其时间复杂度
在该数据结构中,其中id字段代表部门编号,请注意name字段存储的是对应部门名称信息,在设计时还需考虑parentId字段的使用场景与意义。其中parentId字段用于标识所属上级部门,并以0表示一级部门的情况下,在实际应用中可能会遇到一些特殊需求处理情况。现需求设计一个convert函数将原有列表转换为树状数据架构,在具体实现过程中需特别关注每个节点与其子节点之间的关系配置方式以及层级层次的正确展示方式。具体而言就是将该id对应的节点及其children数组挂载在其父节点属性之下,并根据 parentId 的具体数值来确定其在层级中的位置关系。
// 原始 list 如下
let list =[
{id:1,name:'部门A',parentId:0},
{id:2,name:'部门B',parentId:0},
{id:3,name:'部门C',parentId:1},
{id:4,name:'部门D',parentId:1},
{id:5,name:'部门E',parentId:2},
{id:6,name:'部门F',parentId:3},
{id:7,name:'部门G',parentId:2},
{id:8,name:'部门H',parentId:4}
];
const result = convert(list, ...);
// 转换后的结果如下
let result = [
{
id: 1,
name: '部门A',
parentId: 0,
children: [
{
id: 3,
name: '部门C',
parentId: 1,
children: [
{
id: 6,
name: '部门F',
parentId: 3
}, {
id: 16,
name: '部门L',
parentId: 3
}
]
},
{
id: 4,
name: '部门D',
parentId: 1,
children: [
{
id: 8,
name: '部门H',
parentId: 4
}
]
}
]
},
···
];
代码解读
已知数据格式,实现一个函数 fn 找出链条中所有的父级 id
const value = '112'
const fn = (value) => {
...
}
fn(value) // 输出 [1, 11, 112]
代码解读
假设我们有两个排好序的整数数组nums₁和nums₂,请计算这两个排好序数组的中位数,并保证算法的时间复杂度不超过O(\log(m + n))
nums1 = [1, 3]
nums2 = [2]
中位数是 2.0
nums1 = [1, 2]
nums2 = [3, 4]
中位数是(2 + 3) / 2 = 2.5
代码解读
介绍下前端加密的常见场景和方法
编写一个JavaScript函数来接收一个整数类型参数,并生成该整数逆序后的字符串表示。例如,在示例中将输入的整数1234传递给该函数时会得到输出字符串‘4321’。具体要求如下:必须采用递归的方式完成调用流程,并且不能使用全局变量;该函数仅接受单个参数作为处理对象,并最终将结果以字符串形式返回。
