算法三:设计思想

225 阅读2分钟

分而治之(重要)

“分而治之”是算法设计中的一种方法
它将一个问题分成多个和原问题相似的小问题,递归解决小问题,再将结果合并以解决原来的问题

应用场景:归并排序、快速排序

leetcode:374、226、100、101

动态规划(重要)

“动态规划”是算法设计中的一种方法
它将一个问题分解为相互重叠的小问题,通过反复求解子问题,来解决原来的问题

应用场景:斐波那契数列、翻转二叉树

leetcode:70、198

贪心算法

“贪心算法”是算法设计中的一种方法
期盼通过每个阶段的局部最优选择,从而达到全局的最优
结果并不一定是最优

应用场景:零钱兑换、天龙八部-珍珑棋局

leetcode:455、122

回溯算法

“回溯算法”是算法设计中的一种方法
回溯算法是一种渐进式寻找并构建问题解决方式的策略
回溯算法会从一个可能的动作开始解决问题,如果不行,就回溯并选择另一个动作,直到将问题解决

应用场景:全排列

leetcode:46、78

总结

1、明白数据结构与算法的特点应用场景
2、用JS实现一遍,再用第二第三语言实现一遍
3、学会分析时间/空间复杂度
4、提炼前端和算法的结合点,用于工作实战
5、多刷题,至少300道
6、多总结套路、模板
7、多阅读源码,比如React(dom树的操作)、Loadsh(扩展JS数据结构算法,集合的交集……)、V8(JS原生实现的算法)
8、多实战,将算法用于工作

题目

1、

/* 实现,一个dot函数,将嵌套的对象结构转为非嵌套的对象 */

function dot(obj: object) {
 /* 此处实现 */
}

/* 例如 */
const obj = {
 id: 'abc',
 nes: { ted: { value: true } },
 other: { nested: { stuff: 5, stuff2: 6 } },
 some: { array: ['A', 'B'] }
};

const dotObj = dot(obj);
console.log(dotObj);
/*
 {
   "id": "abc",
   "nes.ted.value": true,
   "other.nested.stuff": 5,
   "other.nested.stuff2": 6,
   "some.array[0]": "A",
   "some.array[1]": "B"
 }
*/