- 博客(55)
- 资源 (1)
- 收藏
- 关注
原创 LeetCode题解之贪心算法——【中等】121. 买卖股票的最佳时机
题目给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能
2021-01-26 13:51:54
258
原创 LeetCode题解之贪心算法——【中等】406. 根据身高重建队列
题目假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。示例 1在这里插入代码片输入:people = [[7,0
2021-01-26 11:27:23
225
原创 LeetCode题解之贪心算法——【中等】452. 用最少数量的箭引爆气球
题目在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,所需
2021-01-22 10:11:11
194
原创 LeetCode题解之贪心算法——【中等】435. 无重叠区间
题目给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。示例 1输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2输入: [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。示例 3输入: [ [1,2], [2,3] ]输出: 0解释: 你不需要移除任何区间,因为它们已经是无重叠的了。题解按照
2021-01-21 11:06:14
295
原创 LeetCode题解之贪心算法——【简单】455. 分发饼干
题目假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1输入: g = [1,2,3], s = [1,1]输出: 1解释: 你有三个孩子和两块小饼干,3个孩子的胃口值分别是
2021-01-21 10:16:44
159
原创 LeetCode题解之排序——【中等】75. 颜色分类—(还需改进)
题目给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。示例 1输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]输入:nums = [2,0,1]输出:[0,1,2]输入:nums = [0]输出:[0]输入:nums = [1]输出:[1]题解统计频率输出时间复杂度:O(n);实际是O(3*
2021-01-20 09:33:28
83
原创 LeetCode题解之排序——【中等】451. 根据字符出现频率排序—(还需改进)
题目给定一个字符串,请将字符串里的字符按照出现的频率降序排列。示例 1输入:"tree"输出:"eert"解释:'e'出现两次,'r'和't'都只出现一次。因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。示例 2输入:"cccaaa"输出:"cccaaa"解释:'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。注意"cacaca"是不正确的,因为相同的字母必须放在一起。题解计算每个字母出现的频率利用桶排序,将字
2021-01-20 09:03:48
106
原创 LeetCode题解之排序——【中等】347. 前 K 个高频元素
题目给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2输入: nums = [1], k = 1输出: [1]题解首先使用 map 来存储频率然后创建一个数组(有数量的桶),将频率作为数组下标,对于出现频率不同的数字集合,存入对应的数组下标(桶内)即可。时间复杂度:O(n)空间复杂度:O(n)var topKFrequent = function (nums, k)
2021-01-19 15:50:31
99
原创 LeetCode题解之排序——【中等】215. 数组中的第K个最大元素
题目在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度题解构建大顶堆当找到第k个大顶时就是数组中第k个最大的元素时间复杂度:O(nlogn)建堆的时间代价是 O(n),删除的总代价是 O
2021-01-19 10:21:24
103
原创 03-排序算法的JavaScript实现
目录1. 排序算法2. 冒泡排序2-1. 简单的冒泡排序2-2. 改进冒泡排序2-3. 再次改进冒泡排序3. 选择排序4. 插入排序5. 快速排序6. 归并排序7. 堆排序1. 排序算法稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面。内排序:所有排序操作都在内存中完成;外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行。时间复杂度:一个算法执行所耗费的时间;空间复杂度:运行
2021-01-16 17:33:18
265
原创 LeetCode题解之双指针——【中等】524. 通过删除字母匹配到字典里最长单词
题目给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。示例 1输入:s = "abpcplea", d = ["ale","apple","monkey","plea"]输出: "apple"示例 2输入:s = "abpcplea", d = ["a","b","c"]输出: "a"题解分别用两个指针遍历字符串和字符串字典假设已有匹
2021-01-15 13:45:41
136
原创 LeetCode题解之双指针——【简单】141.环形链表
题目给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。示例 1输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,
2021-01-15 10:05:50
125
原创 LeetCode题解之双指针——【简单】88.合并两个有序数组
题目给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小等于 m + n)来保存 nums2 中的元素。示例 1输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例 2输入:nums1 = [1], m = 1,
2021-01-13 23:24:14
102
原创 LeetCode题解之双指针——【简单】680.验证回文字符串Ⅱ
题目给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1输入: "aba"输出: True示例 2输入: "abca"输出: True解释: 你可以删除c字符。注:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。题解双指针分别从字符串头尾开始移动头指针和尾指针指向的字母不同,则分别判断头指针往后移后和尾指针往前移后生成的字符串是否是回文字符串var validPalindrome = function (s) { let
2021-01-12 10:15:08
163
原创 LeetCode题解之双指针——【简单】345. 反转字符串中的元音字母
题目编写一个函数,以字符串作为输入,反转该字符串中的元音字母。示例 1输入:"hello"输出:"holle"示例 2输入:"leetcode"输出:"leotcede"题解利用Set集合判断是否是元音字母使用双指针,一个指针从头向尾遍历,一个指针从尾到头遍历,当两个指针都遍历到元音字符时,交换这两个元音字符var reverseVowels = function (s) { let Array_s = s.split("") let litter = new
2021-01-12 09:04:00
108
原创 LeetCode题解之双指针——【中等】633.平方数之和
题目给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a^2 + b^2 = c 。示例1输入:c = 5输出:true解释:1 * 1 + 2 * 2 = 5示例2输入:c = 3输出:false题解将左指针初始化为0,将右指针初始化为Math.floor(Math.sqrt(c))若 左指针2 +右指针2 === c,则return true若 左指针2 +右指针2 > c,则右指针 - -若 左指针2 +右指针2 < c,则左指针 ++
2021-01-11 16:53:05
201
原创 LeetCode题解之双指针——【简单】167.两数之和 II - 输入有序数组
题目给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, in
2021-01-11 15:43:44
290
4
原创 16-webpack
目录1. 模块化1-1. 前端模块化的演变1-2. 模块化规范的区分1. 模块化前端模块化是指:通过将前端代码根据一定的规则解耦封装成几个代码文件(模块),并对外暴露特定的接口或方法,然后在项目开发中根据具体情况进化合理的组合的方法,本质上有助于开发效率的提升、提高代码复用率、方便依赖关系管理。1-1. 前端模块化的演变回顾前端模块化的发展,从早期的简单函数封装、对象封装、到立即执行函数表达式(IIFE)、script标签按js依赖执行顺序加载等的简单模块化使用,再到后面形成模块化规范演变C
2020-11-17 22:06:05
239
原创 15-axios
目录1. axios2. axios的基本使用2-1. get请求2-2. post请求3. axios请求方式3-1. get请求3-2. post请求4. axios的并发请求1. axiosaxios是基于promise对ajax的一种封装ajax - mvcaxios - mvvm2. axios的基本使用使用默认方式发送无参请求,默认使用 get 方式进行请求<script src="https://unpkg.com/axios/dist/axios.min.js"&
2020-11-10 21:10:28
321
原创 14-CORS解决跨域
目录1. CORS2. CORS跨域设置2-1. `Access-Control-Allow-Origin`2-2. `Access-Control-Allow-Headers`2-3. `Access-Control-Expose-Headers`1. CORSCORS(Cross-origin resource sharing),跨域资源共享;浏览器技术的规范,用来避开浏览器的同源策略;简单来说就是解决跨域问题的除了jsonp外的另一种方法;比jsonp更加优雅2. CORS跨域设置2
2020-11-10 10:13:06
381
原创 13-利用jsonp解决Ajax跨域问题
目录1. 跨域问题2. jsonp2-1. 动态创建script实现请求2-2. jsonp封装1. 跨域问题浏览器同源策略同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源;源 :协议、域名和端口号;ajax无法跨域2. jsonpJSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题;一般来说位于 server1.example.com 的网页无法与不是 ser
2020-11-05 18:01:01
744
原创 12-前后端交互Ajax
目录1. ajax1-1. ajax的基本使用1-2. 利用ajax来解决验证用户名1-3. get的使用1-3-1. get通过parmas传参1-3-2. get通过url传参[querystring]1-4. post的使用1-4-1.设置http正文头格式1-4-2. 获取头部信息1-4-3. 例子1. ajaxAjax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML)新建XMLHttpRequest对象1-1. ajax的基
2020-11-03 15:23:59
202
原创 02-图的JavaScript实现
目录1. Graph类1-1. 创建Graph类1-2. 实现图的创建1. Graph类1-1. 创建Graph类function Graph() { // 储存图中的所有顶点 let vertices = []; // 用字典来存储邻接表 let adjList = new Map(); // 实现添加顶点 this.addVertex = function (v) { // 将顶点添加到顶点列表中 ver
2020-10-31 19:35:18
125
原创 11-cookie
目录1. cookie1-1. koa中cookie的使用1-2. cookie中options常用设置2. 登录案例【服务端使用cookie】2-1. 存储登录状态2-2. 对比cookie值,实现自动跳转3. 换肤案例【客户端使用cookie】3-1. 客户端cookie的使用方式3-2. 封装cookie3-3. 换肤实现1. cookiecookie是http协议下,服务端或者脚本可以维护客户端信息的一种方式1-1. koa中cookie的使用储存cookie的值ctx.cooki
2020-10-29 20:19:14
216
原创 09-MVC模式
目录1. MVC1. MVCmvc 即 model 、view、controller;mvc模式将model、view、controller分离;使用mvc分层是系统更加灵活,扩展性更强。让程序更加直观、复用性更强、可维护性更强。model 负责数据访问;view 负责视图呈现;controller负责消息处理;...
2020-10-19 22:25:54
72
原创 08-模板引擎
目录1. 模板引擎2. pug模板引擎的使用2-1. pug模板引擎加载2-2. pug语法2-2-1. 层级关系2-2-2. div2-2-3. 类名class2-2-4. id2-2-5. style2-2-6. 注释2-2-7. 转义2-2-8. 定义变量2-2-9. 插值:`#{variable}`2-2-10. 循环:`each val in [1,2,3]`2-2-11. for循环2-2-12. `case...when...`2-2-13. `mixin`2-2-14. 通过include引
2020-10-11 18:40:28
175
原创 07-Koa
目录1. koa介绍1. koa介绍koa是express原班人马打造的轻量、健壮、富有表现力的nodejs框架;目前koa有koa1和koa2两个版本;koa2依赖Node.js 7.6.0或者更高版本;koa不在内核方法中绑定任何中间件,它仅仅是一个轻量级的函数库,几乎所有功能都必须通过第三方插件来实现。...
2020-10-08 20:19:36
91
原创 06-原生js实现新闻列表页面
目录1. 搭建服务器2. 主页显示数据的处理3. 其余路径的处理4. 完整代码1. 搭建服务器为了页面能够正常显示中文,需要设置头部头部的查看:控制台 — Network — 文件 — Headersreq:从浏览器到客户端【请求】res:从客户端到浏览器【响应】const server = http.createServer((req, res) => { res.setHeader("content-type", "text/html;charset=utf-8");})
2020-10-06 13:56:04
1279
原创 05-node+cheerio实现爬虫获取数据
目录1. 爬取网站中的数据2. 格式化数据并写入文件中3. 完整代码1. 爬取网站中的数据const http = require("http");let webUrl = "http://news.ifeng.com/";http.get(webUrl, res => { let str = ""; res.on("data", chunk => { str += chunk; }) res.on("end", () => {
2020-10-04 16:54:55
170
原创 04-Stream流
目录1. Stream2. `createReadStream()`3. `createWriteStream()`4. `pipe()`1. Stream读取大文件的过程中,不会一次性的读入到内存中;每次只会读取数据源的一个数据块。然后后续过程中可以立即处理该数据块(数据处理完成后会进入垃圾回收机制),而不用等待所有的数据。流会把数据分成64kb的小文件进行传输2. createReadStream()创建一个可读流const fs = require("fs");let rs =
2020-10-03 09:02:29
81
原创 03-Buffer
目录1. Buffer创建1-1. `alloc()`1-2. `from()`2. Buffer中的方法2-1. `toString()`2-2. `concat()`2-3. `string_decoder()`1. Buffer创建JavaScript 语言自身只有字符串数据类型,没有二进制数据类型;但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。1-1. alloc()let buf
2020-10-03 08:28:30
104
原创 02-文件操作和目录操作
目录1. 文件操作1-1. 文件写入`writeFile()`1-2. 文件读取`readFile()`1-3. 所有文件操作,函数名+Sync同步操作,没有Sync即异步操作1-4. 修改文件名`rename()`1-5. 文件删除`unlink()`1-6. 文件复制`copyFile()`2. 目录操作2-1. 创建目录`mkdir()`2-2. 修改目录名称`rename()`2-3. 读取目录`readdir()`2-4. 删除空目录`rmdir()`2-5. 删除非空目录3. 通用操作3-1.
2020-10-02 11:25:30
80
原创 01-模块化
目录1. 模块化由来2. Node.js中的模块化 commonjs规范2-1. 创建自定义模块2-2. 自定义模块的按需导出1. 模块化由来在JavaScript发展初期就是为了实现简单的页面交互逻辑,寥寥数语即,如今随着前端代码日益膨胀;这时候JavaScript作为嵌入式的脚本语言的定位动摇了,JavaScript却没有为组织代码提供任何明显帮助,JavaScript极其简单的代码组织规范不足以驾驭如此庞大规模的代码;2. Node.js中的模块化 commonjs规范Common
2020-10-01 11:23:14
103
原创 10-正则表达式(Regular Expression)
目录1. 正则创建1-1. 方式一:字面量创建1-2. 方式二:构造函数创建1-3. 全局匹配 — g1-4. 创建方式的选取2. 正则方法 — Reg.function()2-1. test()2-2. exec()3. 字符串方法 — String.function()3-1. split()3-2. replace()3-3. search()3-4. match()1. 正则创建1-1. 方式一:字面量创建\正则表达式\let str = "andhhasdjh125563jkhh";
2020-09-29 16:16:16
1112
原创 09-Generator——async和await的实现原理
目录1. Generator2. 用Generator实现async和await1. Generator使用 function* 语法和一个或多个 yield 表达式以创建一个函数即为生成器,它的返回值就是一个迭代器即生成器;其实整个 Generator 函数就是一个封装的异步任务,或者说是异步任务的容器;异步操作需要暂停的地方,都用 yield 语句注明function* fn(x) { let y = yield x + 2; y = yield x * 8; re
2020-09-28 20:05:42
225
原创 08-Symbol.iterator迭代器
目录1. 迭代器2. 采用Symbol.iterator实现某个类型的迭代的模板3. 采用Symbol.iterator实现Object类型的迭代1. 迭代器 Symbol.iterator 为每一个对象定义了默认的迭代器。该迭代器可以被 for…of 循环使用。 当需要对一个对象进行迭代时(比如开始用于一个for…of循环中),它的@@iterator方法都会在不传参情况下被调用,返回的迭代器用于获取要迭代的值。 如Array类型:let array = ["a", "b", "c", "
2020-09-28 19:18:29
314
原创 07-ES6模块化
目录1. 模块化2. 模块化示例1. 模块化每个模块有自己独立的作用域若没有将模块中的变量导出,则模块外的代码无法获得该变量模块化的目的:防止变量污染2. 模块化示例export default - 只能导出一个变量...
2020-09-28 14:44:47
74
原创 06-实现Vue数据劫持
目录1. 数据劫持1. 数据劫持 当访问或设置对象的属性的时候,都会触发相对应的函数,然后在这个函数里返回或设置属性的值。既然如此,可以在触发函数的时候动一些手脚做点我们自己想做的事情,这也就是“劫持”操作; 给数据添加监听,一旦数据发生变化,就执行视图的修改操作,这个过程就是数据劫持...
2020-09-26 19:12:32
270
自然语言处理的电影数据集/语料集
2019-04-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人