插入排序
逻辑
1、序列的第一个元素看成一个有序序列,第二个元素到序列末尾看成未排序序列;
2、取未排序序列的第一个元素与有序序列进行比较,并插到有序序列合适的位置;
3、重复步骤 2,直至未排序序列末尾为止。
JavaScript 代码实现12345678910111213141516const arr = [1, 2, 6, 34, 7, 9, 11, 16, 13, 19, 0, 3]function insertionSort(arr) { let len = arr.length for (let i = 1, max = len; i < max; i++) { let currentI = arr[i] let j = i - 1 // 把当前的元素与已排序列进行比较(从最后一位开始),如果已排序列元素大于当前元素,就把已排序列的元素向后移动一位,依次类推。 while (j >= 0 && arr[j] > currentI) { arr[j + 1] = arr[j] ...
LeetCode 013:罗马数字转整数
#栈 #哈希表 #leetcode #JavaScript
题目地址
https://leetcode.cn/problems/roman-to-integer
题目描述12345678910111213141516171819202122232425262728293031323334353637383940414243罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。 ...
LeetCode 第 1 号问题:两数之和
#栈 #哈希表 #leetcode #JavaScript #数组
LeetCode 第 1 号问题:两数之和题目地址
https://leetcode-cn.com/problems/two-sum
题目描述12345678910给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]
解法一(Map 数据结构)思路
首先创建一个Map。1const map = new Map()
接着。遍历nums。123let len = num.length // nums的长度for(let i =0;i<len;i++){}
然后。定义diff = target 减去某一位置的值。如果,map.has(diff)也就是map 储存在差值,直接返回插值的 ...
LeetCode 003:无重复字符的最长子串
#栈 #哈希表 #leetcode #JavaScript #字符串 #滑动窗口 #双指针
LeetCode 003:无重复字符的最长子串题目地址
https://leetcode.com/problems/longest-substring-without-repeating-characters/description/
题目描述12345678910111213141516171819给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序 ...
LeetCode 012:整数转罗马数字
#栈 #哈希表 #leetcode #JavaScript
题目地址
https://leetcode.cn/problems/integer-to-roman
题目描述1234567891011121314151617181920212223242526272829303132333435363738394041424344罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 ...
LeetCode 004:寻找两个正序数组的中位数
LeetCode 第 4 号问题:寻找两个正序数组的中位数题目地址
https://leetcode-cn.com/problems/median-of-two-sorted-arrays/
题目描述给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。
请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
示例 1:
12345678910nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5
思路暴力解决方法:拼接后找中位数
代码一12345678910111213141516const findMedianSortedArrays = function (nums1, nums2) { let arr = nums1.concat(nums2) // 合并两个数组 arr.sort((a, b) => a ...
LeetCode 011:盛最多水的容器
题目地址
https://leetcode.cn/problems/container-with-most-water/
题目描述12345678910111213141516给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例 2:输入:height = [1,1]输出:1
解答代码一1234567891011121314151617var maxArea = function (height) { let len = height.length if (len <= 1) return 0 let result = 0, i = 0, j = l ...
js去除中括号
12345var str = '这是一个字符串[html]语句;[html]字符串很常见';<br>alert(str.replace(/\[|]/g,''));//移除字符串中的所有[]括号(不包括其内容)//输出:这是一个字符串html语句;html字符串很常见<br>alert(str.replace(/\[.*?\]/g,''));//移除字符串中的所有[]括号(包括其内容)//输出:这是一个字符串语句;字符串很常见
移除所有中括号,不包括其内容123let str = '[1,2,3,4,5,6,7,8]'let newStr = str.replace(/\[|]/g, '')console.log(newStr) //1,2,3,4,5,6,7,8
移除所有中括号,包括其内容123let str = '[1,2,3,4,5,6,7,8]'let newStr = str.replace(/\[.*?\]/g, ' ...
【源码剖析】new Vue 发生了什么
说明
vue 业务代码写了几年,对其痛点有了相应了解,想更深入理解其痛点原因。
学习源码中的思路,了解其 api 输出的原理。
vue2.6 已经到终版,对比大佬之前版本的源码分析,可以看其最后某些代码优化。
代码剖析new 关键字在 Javascript 语言中代表实例化是一个对象,而 Vue 实际上是一个类,类在 Javascript 中是用 Function 来实现的。所以我们得找到Vue函数,从而去分析其函数执行究竟做了些什么
/src/core/instance/index.js
123456function Vue(options) { if (process.env.NODE_ENV !== 'production' && !(this instanceof Vue)) { warn('Vue is a constructor and should be called with the `new` keyword') } this ...
【源码剖析】$mount挂载
说明
从new Vue这个过程最后,vm.$mount(vm.$options.el)可以看到 el 挂载。这一章将研究这一过程。具体分析 vue 如何将组件挂载到页面成为真实 Dom 的。
这是new Vue过程的代码
1234if (vm.$options.el) { // 挂载el vm.$mount(vm.$options.el)}
代码剖析看了很多相关文章,大部分文章并没有讲述为啥要先分析 compiler 版本代码$mount,再去分析 runtime-only 版本的代码上的$mount。所有一开始就会有点懵,为啥要这么去分析。
/src/platforms/web/entry-runtime-with-compiler.js
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 ...