从“数组”到“两数之和”:JS新手的进阶之路
“写代码如同修仙,数组就是你的法宝!”
前言
大家好,我是你们的前端小伙伴。今天我们来聊聊 JS 基础中的“数组”以及 LeetCode 上的经典面试题“两数之和”。别急,本文不仅有技术干货,还有网络热梗,保证你看完直呼“YYDS”!
JS 基础语法小盘点(补充版)
除了变量、函数、条件和循环语句,JS 还有很多“骚操作”,让我们一起“盘它”!
- 变量声明
- var、let、const 各有千秋
- 数据类型
- 基本类型:Number、String、Boolean、Null、Undefined、Symbol、BigInt
- 引用类型:Object、Array、Function
- 作用域与提升
- var 有函数作用域,let/const 有块级作用域
- 变量提升:var 声明的变量会提升,let/const 不会
- 模板字符串
- 让拼接字符串不再“头秃”
- 例:
const name = '前端小白'; console.log(`Hello, ${name}!`)
- 解构赋值
- 让你优雅地“拆包”
- 例:
const arr = [1, 2, 3]; const [a, b, c] = arr; const obj = {x: 10, y: 20}; const {x, y} = obj;
- 箭头函数
- 语法更简洁,this 指向更“佛系”
- 例:
const add = (a, b) => a + b;
- 三元运算符
- 让 if-else 变身“一行流”
- 例:
const res = a > b ? '大于' : '小于等于';
- 短路运算符
- 让代码更“丝滑”
- 例:
const name = user.name || '匿名用户';
- for...of / for...in
- for...of 遍历数组,for...in 遍历对象属性
- 常用数组方法
- map、filter、reduce、forEach、find、some、every
- 变量
var abc = 1
let abc = 2
const abc = 3
- 函数
function add() {
// ...
}
- 语句
1.条件语句
2.循环语句
- 数组
1.线性的
2.有序地
# 复杂度
1.时间复杂度 O(1) O(n)
2.空间复杂度 O(n)
是不是有点“爷青回”的感觉?
数组操作,花样百出
数组是 JS 的灵魂,操作起来那叫一个丝滑。
var arr = [1, 2, 3, 4, 5, 'hello', 'world']
// arr.unshift('hello') // 头部添加
// arr.shift() // 头部删除
// arr.push('world') // 尾部添加
// arr.pop() // 尾部删除
// arr.splice(2, 1, 'hello', 'world') // 任意位置添加/删除
// arr.slice(1, 3) // 任意位置截取
for (var i = 0; i < arr.length; i++) {
// arr[i] = arr[i] + 1
}
console.log(arr.indexOf('c'))
数组的各种骚操作,简直让人“直呼内行”。
LeetCode 1:两数之和
暴力破解法——“体力型选手”
let nums = [2,7,11,15], target = 9;
var twoSum = function(nums, target) { //暴力破解
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] === target) {
return [i, j]
}
}
}
};
这就是传说中的“穷举法”,时间复杂度 O(n²),面试官看到可能会说:“你这代码有点‘原地爆炸’啊!”
哈希表法——“聪明绝顶型选手”
var twoSum = function(nums, target) { //用空间换时间
let map = new Map();
for(let i = 0; i < nums.length; i++){
let diff = target - nums[i];
if(map.has(diff)){
return [map.get(diff), i]
}
map.set(nums[i], i)
}
};
哈希表法,时间复杂度 O(n),空间换时间,效率直接“起飞”,这才是“打工人”的正确姿势!
总结
- JS 基础语法要扎实,骚操作要会用
- 数组操作要熟练,面试不慌
- 两数之和暴力法适合入门,哈希法才是王道
- 技术要硬核,心态要“摆烂”——遇到不会的,先抄一遍再说,慢慢理解
最后,祝大家都能在算法修炼路上“扶摇直上九万里”,早日实现“offer自由”!
“代码写得好,面试没烦恼!”
如果你觉得本文有点意思,记得一键三连,咱们下次见!