lucifer
lucifer
! 高赞的回答时间复杂度太高,面试并不一定能过 ## 题目地址(75. 颜色分类) https://leetcode-cn.com/problems/sort-colors/ ## 题目描述 ``` 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 进阶: 一个直观的解决方案是使用计数排序的两趟扫描算法。 首先,迭代计算出0、1 和 2...
> 就我的使用来说(Vue)key的作用是为了在数据变化时强制更新组件,以避免“原地复用”带来的副作用,官方文档也说明了**不带key性能更好**,见:[List Rendering - key](https://cn.vuejs.org/v2/guide/list.html#key) 我的理解是,vue和react虽然都采用了diff算法。 但是react本身的设计和vue的设计是截然不同的, vue采用了更加细粒度的更新组件的方式,即给每一个属性绑定监听, 而react是采用自顶而下的更新策略,每次小的改动都会生成一个全新的vdom。从而进行diff,如果不写key,可能就会发生本来应该更新却没有更新的bug。 这个bug其实和diff算法有关,react团队完全可以写一个没有这个“bug”版本的代码, 但是这是一种权衡,一种性能和方便使用的权衡。 写不写key能够提高性能的根本在于一方面diff算法会优先判断key是否相同,如果相同则不进行后面的运算。 如果key相同,就更好了,根本不需要重新创建节点 总结, 更确切的说应该是diff算法在你的`复杂`的列表`稳定`的时候能够明显提高性能,因为节点可以重用。 但是对于列表`频繁更新`的场景, 节点不能重用,但是diff 可以`省略一部分逻辑`,因此性能也会更好。 但是两者的性能优化不在同一个纬度,一个是 创建和更新节点(我称之为`渲染器`)的优化, 一个是DOM diff 算法(我称之为`核心引擎`)的优化
## 关于O(n^3)怎么计算出来的 ## 问题描述 原问题标题“React 和 Vue 的 diff 时间复杂度从 O(n^3) 优化到 O(n) ,那么 O(n^3) 和 O(n) 是如何计算出来的? ” 1. 这里的n指的是页面的VDOM节点数,这个不太严谨。如果更严谨一点,我们应该应该假设 变化之前的节点数为m,变化之后的节点数为n。 2. React 和 Vue 做优化的前提是“放弃了最优解“,本质上是一种权衡,有利有弊。 倘若这个算法用到别的行业,比如医药行业,肯定是不行的,为什么? React 和...
> 没看懂你们的回答在答什么,原来的O(n^3)是怎样的,然后通过什么策略变成了O(n)的? 问题只是问3次方怎么计算,没有说 n 怎么优化的哦
## Clarify Since the description kind of loose, So Let's make it clear. Suppose that, all the list are unique , eg: [1,2,2,3] is not allow.Otherwise the solution could be...
> > ## Clarify > > Since the description kind of loose, So Let's make it clear. > > Suppose that, all the list are unique , eg: [1,2,2,3] is...
```js function MRC(str) { str = str + "$"; let count = (max = 1); let maxKeys = [str[0]]; for (let i = 0; i < str.length; i++) { const...
这是一个leetcode原题, 题目链接:https://leetcode.com/problems/median-of-two-sorted-arrays . 官方中文版链接: https://leetcode-cn.com/problems/median-of-two-sorted-arrays/ 以下我的答案: ```js /** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number} */ function findKth(nums1, nums2, k) { if (nums1.length === 0) return...
I will take that into consideration