算法 | 整理数据结构 | 算法题中,JS 容器的选择

总结:算法题 JS 容器选择速查表

需求 用什么
是否出现过 Set
不同元素个数 Set.size
频率统计 Map
顺序访问 Array / String
随机访问 Array / String
去重 Set
哈希查找 Set / Map

JS 容器范式手册:Set、Map、字符串、数组

注意,区分 "值容器 "和"结构容器"


一、String(字符串)范式

字符串是只读的、类数组结构

javascript 复制代码
let s = "abcde";

s.length        // 5
s[0]            // "a"
s.charAt(0)     // "a"

// 算法遍历范式:
for (let i = 0; i < s.length; i++) {
    let ch = s[i];
}

二、Array(数组)范式

数组是有序容器 + 有 length

javascript 复制代码
let arr = [10, 20, 30];

arr.length   // 3
arr[1]       // 20

// 遍历范式:
for (let i = 0; i < arr.length; i++) {}
for (const x of arr) {}

// 判重(慢):
arr.includes(x)   // O(n)

三、Set(去重集合)范式

Set = 无序、唯一元素集合

javascript 复制代码
let set = new Set();

set.add("a")
set.add("b")
set.add("a") // 不会重复

set.size // 2

算法题标准用法

1️⃣ 统计不同元素
javascript 复制代码
let set = new Set();
for (let x of arr) {
    set.add(x);
}
let distinct = set.size;
2️⃣ 判断是否存在

set.has(x)

3️⃣ 清空集合

set.clear()


四、Map(计数器 / 哈希表)范式

Map = key → value(非常适合频率统计)

let map = new Map();

1️⃣ 计数范式(高频)

javascript 复制代码
for (let ch of s) {
    map.set(ch, (map.get(ch) || 0) + 1);
}

2️⃣ 取值

map.get("a") // undefined 或 数字

3️⃣ 判断是否存在

map.has("a")

相关推荐
纪念 22919 分钟前
算法二叉树(一)
算法
breeze jiang33 分钟前
Next.js 16 App Router 实战:从 About、Blog 动态路由到全局 404
开发语言·javascript·ecmascript
liulilittle44 分钟前
llmx 学习手册 06 —— CPU 指令集优化(AVX-512 三层演进)
c++·学习·算法·ai·llm
IT_陈寒1 小时前
Python装饰器把我坑惨了,原来这样用才不掉链子
前端·人工智能·后端
程序员爱钓鱼1 小时前
Rust Associated Type关联类型详解:为Trait定义内部类型
前端·后端·rust
土司大王1 小时前
LeetCode hot100——相交链表
算法·leetcode·链表
土司大王1 小时前
LeetCode hot100——回文链表
算法·leetcode·链表
sel_92 小时前
【Docker】Docker 安装与使用详解:从零搭建到日常实战
人工智能·深度学习·算法·docker
zh_xuan2 小时前
个人主页左侧菜单支持分组,以及菜单显示和隐藏
前端·javascript·css
Ming_studying2 小时前
HTML + CSS + JavaScript实现可视化JSON工具:格式化、折叠、搜索与错误定位
javascript·css·html·json·数据可视化·web工具