从“数组”到“两数之和”:JS新手的进阶之路

220 阅读3分钟

从“数组”到“两数之和”: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自由”!

“代码写得好,面试没烦恼!”

如果你觉得本文有点意思,记得一键三连,咱们下次见!