自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 收藏
  • 关注

原创 LeetCode 1004. 最大连续1的个数 III(遍历)+ (双指针优化)—— JavaScript

题链接:https://leetcode-cn.com/problems/max-consecutive-ones-iii/题描述:解题思路(遍历):遍历数组,在每个位置上面向后模拟,直到遍历完数组或者可翻转的次数用完。实时维护最长长度。代码实现(遍历):/** * @param {number[]} A * @param {number} K * @return {number} */var longestOnes = function(A, K) { let

2020-12-15 23:40:30 330 2

原创 LeetCode 495. 提莫攻击(遍历)—— JavaScript

题链接:https://leetcode-cn.com/problems/teemo-attacking/题描述:解题思路:如果 t[i - 1] + time <= t[i],表示上一次攻击的中毒状态已经结束,那么这一次的攻击中毒时间就是 time。如果 t[i - 1] + time > t[i],表示上一次攻击的中毒状态仍在持续,那么这一次的攻击中毒时间就是 t[i] - t[i - 1]。代码实现:/** * @param {number[]} timeS

2020-12-14 15:04:07 259

原创 LeetCode 300. 最长连续序列(map + 朴素遍历)+(set + 优化遍历)—— JavaScript

相似题:LeetCode 300. 最长上升子序列本题链接:https://leetcode-cn.com/problems/longest-consecutive-sequence/题描述:解题思路(map + 遍历):利用 map 表示当前元素是否存在数组中。每次对当前元素进行向前和向后的遍历,统计该元素的连续序列的长度。代码实现(map + 遍历):/** * @param {number[]} nums * @return {number} */var lo

2020-12-13 12:43:17 274 1

原创 LeetCode 134. 加油站(遍历)—— JavaScript

题链接:https://leetcode-cn.com/problems/gas-station/题描述:解题思路:遍历数组,在每一个位置上模拟行驶,因为答案唯一,所以成功一次就直接返回。代码实现:/** * @param {number[]} gas * @param {number[]} cost * @return {number} */var canCompleteCircuit = function(gas, cost) { for (let i =

2020-12-12 12:19:25 274

原创 LeetCode 139. 单词拆分(动态规划)—— JavaScript

题链接:https://leetcode-cn.com/problems/word-break/题描述:解题思路:dp[i] 表示从 s[0] 到 s[i -1] 的字符串能否被正确拆分。dp[i] 通过判断 dp[j] 是为 true 且 [j, i] 的字符串是否存在字典中来求值。那么我们要求的就是 dp[s.length] 是否能被正确拆分。代码实现:/** * @param {string} s * @param {string[]} wordDict * @

2020-12-10 22:28:22 191 1

原创 LeetCode 209. 长度最小的子数组(两种解法)(贪心 + 双指针)—— JavaScript

题链接:https://leetcode-cn.com/problems/minimum-size-subarray-sum/题描述:解题思路(贪心):遍历数组,每次从当前元素开始,往后累加元素值,如果累加值大于等于 s,这一段就是符合条件的子数组,最后返回最短的长度即可。代码实现(贪心):/** * @param {number} s * @param {number[]} nums * @return {number} */var minSubArrayLen = f

2020-12-10 12:08:15 160 1

原创 LeetCode 45. 跳跃游戏 II(贪心)—— JavaScript

题链接:https://leetcode-cn.com/problems/jump-game-ii/题描述:解题思路:每次在当前位置可到达的范围内寻找可跳跃数最高的。然后下次跳跃的位置就是该位置,每跳一次步数加一。代码实现:/** * @param {number[]} nums * @return {number} */var jump = function(nums) { if (nums.length == 1 || nums.length == 0) {

2020-12-09 17:45:27 229 1

原创 LeetCode 300. 最长上升子序列(动态规划)—— JavaScript

题链接:https://leetcode-cn.com/problems/longest-increasing-subsequence/submissions/题描述:解题思路:这里的上升序列是严格上升序列,[1, 2, 2] 输出是2。利用 dp 数组保存当前元素的最长上升子序列的长度。代码实现:/** * @param {number[]} nums * @return {number} */var lengthOfLIS = function(nums) {

2020-12-08 19:05:10 210

原创 LeetCode 55. 跳跃游戏(贪心)—— JavaScript

题链接:https://leetcode-cn.com/problems/jump-game/题描述:解题思路:对于位置 i 上的元素,它可以跳跃到的最远位置为 i + nums[i],如果某个元素跳跃的最远位置超出或等于数组末尾的位置则返回 true。即,我们依次遍历数组元素,并实时维护一个最远位置,对于当前遍历元素,如果该元素在最远位置内,则代表该元素是可到达的。代码实现:/** * @param {number[]} nums * @return {boolean}

2020-12-07 13:53:28 2118 6

原创 LeetCode 198. 打家劫舍 (动态规划 + 优化)—— JavaScript

题链接:https://leetcode-cn.com/problems/house-robber/题描述:解题思路:设置一个 dp 数组,dp[i] 表示在当前位置下,不触发警报能偷窃到的最大金额。则:dp[i] 等于与 i 不相邻的左边的 max(dp[0] — dp[i - 2]) 加上 nums[i]。dp[0] 为 nums[0],dp[1] 为 nums[1]。最后返回 dp[] 中的最大值即可。根据以上,我们写出第一版代码:代码实现(第一版):/** *

2020-12-06 10:19:03 240 3

原创 LeetCode 42. 接雨水(双指针 + 优化)—— JavaScript

题链接:https://leetcode-cn.com/problems/trapping-rain-water/题描述:解题思路(初始版):水能达到的最高位置为两边最大高度的较小值减去当前高度的值。对于数组中的每个元素,通过遍历数组,使用 left_max 保存当前元素左边的最大值,right_max 保存右边的最大值,然后用两者的较小值减去当前高度并累积到结果中。根据这个思路,我们写出初始版代码:代码实现(初始版):/** * @param {number[]} he

2020-12-05 11:40:01 204

原创 LeetCode 35. 搜索插入位置(二分查找)—— JavaScript

题链接:https://leetcode-cn.com/problems/search-insert-position/题描述:解题思路:对于查找索引,用正常的二分查找即可。对于查找插入位置,在二分查找的时候,记录第一个大于该元素的元素下标即可。代码实现:/** * @param {number[]} nums * @param {number} target * @return {number} */var searchInsert = function(nums,

2020-12-04 20:01:18 224

原创 LeetCode 14. 最长公共前缀(纵向扫描)—— JavaScript

题链接:https://leetcode-cn.com/problems/longest-common-prefix/题描述:解题思路:从前往后遍历每个字符串的每一列,比较相同列上的字符是否相同,如果相同则遍历下一列,不相同则表示当前列前面的部分为最长公共前缀。代码实现:/** * @param {string[]} strs * @return {string} */var longestCommonPrefix = function(strs) { if (st

2020-12-03 23:23:46 136

原创 LeetCode 3. 无重复字符的最长字串(滑动窗口)—— JavaScript

题链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/题描述:解题思路:使用两个指针表示不重复子串的左右边界,i 表示左边界,right 表示右边界,set 用来存储不重复子串。i 是当前不重复子串的起始位置,从 right 开始向后遍历,直到字符重复为止,这一段就是从 i 开始的不重复子串,那么下一次从 i + 1 开始遍历时,i + 1 到 right 这一段仍然是不

2020-12-02 17:07:00 125 1

原创 LeetCode 剑指 Offer 53 - I. 在排序数组中查找数字 I(二分查找)—— JavaScript

题链接:https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof/题描述:解题思路:使用两次二分查找左右边界,数字出现次数即为 right - left - 1。代码实现:/** * @param {number[]} nums * @param {number} target * @return {number} */var search = function(nums,

2020-11-29 10:10:05 142

原创 LeetCode 剑指 Offfer 59 - II. 队列的最大值(辅助队列)—— JavaScript

题链接:https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/类似题:栈的最小值(辅助栈)题描述:解题思路:利用 numQueue 保存输入的变量,利用辅助队列 assQueue 维护一个递减队列,队首存放 numQueue 中的最大值。(1)max_value: 如果队列为空,返回 -1,否则返回 assQueue 队首元素。(2)push_back: 当一个新的元素 T 要进入 numQueue 时..

2020-11-28 18:33:12 150

原创 LeetCode 剑指 Offer 14- I. 减绳子(动态规划)—— JavaScript

题链接:https://leetcode-cn.com/problems/jian-sheng-zi-lcof/题描述:解题思路:当绳子长度为 2 或 3 时,直接返回 n -1:2 = 1 + 1 = 1 * 1 = 1,3 = 1 + 2 = 1 * 2 = 2。当绳子长度大于等于4时,利用数组 dp 保存当前绳子的最大乘积,即 dp[i] 表示长度为 i 的绳子拆分的最大乘积。代码实现:/** * @param {number} n * @return {num.

2020-11-26 00:10:40 170

原创 LeetCode 剑指 Offer 45. 把数组排成最小的数—— JavaScript

题链接:https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/题描述:解题思路:对于两个字符串 a 和 b,如果 a + b > b + a,则 b 应该放在 a 前面。例如:a = "3",b = "30",a + b == "330" > b + a == "303",所以在最后拼接的字符串中,b 必然在 a 的前面,利用这一点,我们可以将数组转换为字符串数组后进行排序,最后返回

2020-11-24 13:15:37 245 2

原创 LeetCode 剑指 Offer 41. 数据流中的中位数—— JavaScript

题链接:https://leetcode-cn.com/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof/题描述:解题思路:利用数组存储数据并排序。addNum():(1)找出添加的数据在数组中合适的位置(2)插入该数据findMedian():(1)如果数组长度为奇数,中位数等于数组中间的元素(2)如果为偶数,则为中间两个数的平均值代码实现:function(){ } ...

2020-11-23 09:59:30 185 1

原创 LeetCode 剑指 Offer 30. 包含 min 函数的栈(辅助栈)—— JavaScript

题链接:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/题描述:解题思路:栈 A 用于正常存储所有元素,栈 B 用于存储最小元素。代码实现

2020-11-23 00:08:58 237 1

原创 call 和 apply 的模拟实现—— JavaScript

callcall 方法在使用一个指定的 this 和若干个参数的情况下调用某个函数或方法。例如:<script> let foo = { value: "foo" }; function pri() { console.log(this.value); } pri.call(foo); //foo</script>模拟实现要注意以下:(1)call 改变了 pri 的 this 的.

2020-11-22 11:11:32 259

原创 Vue 插槽—— Vue 学习笔记(十一)

插槽一般情况下,html 中的组件之间的内容会被抛弃,例如:效果:对于这种情况,我们可以使用 <slot> 在 <box></box> 内添加内容:效果:即:当组件渲染的时候,<slot></slot> 将会被替换为 "<p>content</p>",插槽内可以包含任何模板代码,即使是其他组件。编译作用域我们可以在插槽中访问来自 Vue 实例的 property:效.

2020-11-21 20:58:26 161

原创 LeetCode 剑指 Offer 66. 构建乘积数组—— JavaScript

题链接:https://leetcode-cn.com/problems/gou-jian-cheng-ji-shu-zu-lcof/题描述:解题思路:B[i] 的值为数组 A 中除了下标为 i 的元素的乘积。B[0] = A[1] * A[2] * A[3] * A[4]。分别迭代计算上三角和下三角两部分的乘积即可得出结果。代码实现:/** * @param {number[]} a * @return {number[]} */var constructArr

2020-11-21 10:15:32 199 1

原创 LeetCode 剑指 Offer 47.礼物的最大价值(动态规划)—— JavaScript

题链接:https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof/题描述:解题思路:每个单元格只能由另一个单元格向右走或者向下走到达,设 f(i, j) 为从棋盘左上角走到当前单元格的累计最大礼物价值。所以 f(i, j) 为 f(i-1, j) 和 f(i, j-1) 中的较大值加上当前单元格的礼物价值 grid[i][j]。对于边界:(1)当 i==0 且 j ==0 时,f(i, j) = grid[i][j

2020-11-20 21:14:53 224 1

原创 插入排序、冒泡排序、快速排序—— JavaScript

插入排序<script> let arr = [2, 3, 1, 5, 4]; for (let i = 1; i < arr.length; i++) { let t = arr[i]; let j = i - 1; while (arr[j] > t && j >= 0) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = t; } </script&g.

2020-11-17 11:49:16 118

原创 父子组件通信(props 与 $emit)——Vue 学习笔记(十)

父组件传递数据给子组件<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>父组件传值给子组件</title> <script type="text/javascript" src="../js/vue.js"></script> </head> <body> <div id="app".

2020-11-16 22:14:06 150

原创 组件注册 —— Vue 学习笔记(九)

组件是可复用的 Vue 实例,我们可以在一个通过 new Vue 创建的根实例当中,使用根实例创建之前注册的组件。因为组件是 Vue 实例,所以它们与 new Vue 接受相同的选项,例如:data、computed、watch、methods 以及生命周期钩子等,仅有的例外是像 el 这样根实例特有的选项。全局注册组件<!DOCTYPE html><html> <head> <meta charset="utf-8"> <

2020-11-16 09:30:29 142

原创 两个栈实现队列、两个队列实现栈——JavaScript

两个栈实现队列设有 s1,s2 两个栈,s1 用于入队操作,s2 用于出队操作。入队:如果 s2 有元素,就将 s2 所有元素压入 s1,然后将新入队的元素压入 s1。出队:如果 s1 有元素,就将 s1 所有元素压入 s2,然后 s2 移除栈顶元素。<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title>两个栈实现队列</title>.

2020-11-15 20:00:23 171

原创 CSS 盒子模型(标准盒模型和怪异盒模型)

盒子模型介绍所谓盒子模型(Box Model)就是把 HTML 页面中的元素看作是一个矩形的盒子,也就是一个盛装内容的容器。每个矩形都由元素的内容(content)、内边距(padding)、边框(border)和外边距(margin)组成。所有的文档元素(标签)都会生成一个矩形框,我们称为元素框(element box),它描述了一个文档元素在网页布局汇总所占的位置大小。因此,每个盒子除了有自己大小和位置外,还影响着其他盒子的大小和位置。标准的 W3C 盒子模型和 IE 盒子模型。.

2020-11-14 23:48:42 355

原创 LeetCode 172. 计算阶乘 n! 末尾0的个数——JavaScript

题链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes/题描述:思路:因为题目要求 O(log n) 的时间复杂度,所以不能通过计算 n!,然后计算它的末尾0的个数来求解。n! = k * (10^m),k 为不能被10整除的数,m 就是 n! 末尾0的个数。10 = (2 * 5)^m,所以问题就变成了求2和5的指数,因为能被2整除的数比能被5整除的数多,所以我们求出5的指数即可。设 n = 25,从1到25

2020-11-14 20:17:04 295

原创 Vue 表单输入绑定(v-model 双向数据绑定)——Vue 学习笔记(八)

v-model我们可以使用 v-model 指令在表单 <input>、<textarea> 及 <select> 元素上创建双向数据绑定,它会根据控件类型自动选取正确的方法来更新元素。v-model 本质上只是语法糖。它负责监听用户的输入事件以及更新数据,并对一些极端场景进行一些特殊处理。v-model 会忽略所有表单元素的 value、checked、selected attribute 的初始值而总是将 Vue 实例的数据作为数据来源:不使用 v.

2020-11-14 17:03:31 541

原创 var、let、const 的区别(作用域、提升、重复声明等)——JavaScript

let 和 const 是 es6 推出的声明变量的关键字。个人觉得这三个关键字最大的区别就是作用域和提升。(1)作用域var 声明的范围是函数作用域,let 和 const 声明的范围是块作用域。 { var varT = "var"; } console.log(varT); //var { let letT = "let"; } console.log(letT); //Uncaught ReferenceError: letT i

2020-11-14 09:29:24 531

原创 使用 Vue + Flex 编写一个简易的购物车

页面布局采用 flex 布局,元素渲染、用户操作采用 Vue。(1)首先我们将商品信息放在数组中,并将该数组保存在 Vue 实例的数据对象中。商品信息包括:id、图片 url、商品名、商品单价、库存、当前选择数量。let shopArr = [ {id: 1, url: './img/1.jpg', title: '大豆家 方头奶奶鞋', money: 118, num: 20, need: 0}, {id: 2, url: './img/2.jpg', title: '家宝路转角水槽

2020-11-13 18:31:46 329

原创 Vue 列表渲染(v-for)——Vue 学习笔记(七)

v-for 基本语法我们可以用 v-for 指令基于一个数组来渲染一个列表,v-for 指令需要使用 item in items(item of items 也可以)形式的语法,其中 items 是源数据数组,而 item 是被迭代的数组元素的别名:结果:在 v-for 块中,我们可以访问所有父作用域的 property,v-for 还支持一个可选的第二参数,即当前项的索引:结果:v-for 也可以遍历对象:...

2020-11-13 13:17:33 813

原创 三栏布局的实现方法(浮动、绝对定位、弹性布局)

1.弹性布局设置三个 div 的父元素的 display: flex;然后设置中间 div 的flex-grow: 1;(用于决定项目在有剩余空间的情况下是否放大,默认值为 0,即不放大)<!DOCTYPE html><html> <head> <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content="IE=edge, chrome=1"> ..

2020-11-12 20:31:16 509

原创 Vue 条件渲染(v-if 与 v-show)——Vue 学习笔记(六)

v-ifv-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值的时候被渲染。例如:不推荐同时使用 v-if 和 v-for,当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级。(1)在 <template> 元素上使用 v-if 条件渲染分组因为 v-if 是一个指令,所以必须将它添加到一个元素上。如果想渲染多个元素,可以把一个 <template> 元素当作不可见的包裹元素,并在上面.

2020-11-12 18:54:14 445 1

原创 Class 与 Style 绑定——Vue 学习笔记(五)

Class 绑定(1)字符串方法绑定(2)对象语法我们可以传给 v-bind:class 一个对象,以动态地切换 class:同时,v-bind:class 指令也可以与普通的 class attribute 共存,例如:绑定的数据对象不必内联定义在模板里:效果和上面的例子一模一样。我们也可以在这里绑定一个返回对象的计算属性:依旧可以正常运行。(3)数组语法:我们可以把一个数组传给 v-bind:class,以应用一个 .

2020-11-12 13:09:12 959 3

原创 Vue 计算属性和侦听器(computed 与 watch)——Vue 学习笔记(四)

计算属性:结果:在上面的例子中我们声明了一个计算属性 reversedMsg 。我们可以像绑定普通 property 一样在模板中绑定计算属性,Vue 知道 vm.reversedMsg 依赖于 vm.msg,因此当 vm.msg 发生改变时,所有依赖于 vm.reversedMsg 的绑定也会更新。计算属性缓存 VS 方法我们通过方法同样可以达到上面例子的效果。不同的是:计算属性是基于它们的响应式依赖进行缓存的。只在相关依赖发生改变时,它们才会重新求值。这意.

2020-11-11 22:18:20 168 2

原创 Vue 模板语法——Vue 学习笔记(三)

Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML,所以能被遵循规范的浏览器和 HTML 解析器解析。在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。插值:(1)文本:数据绑定最常见的形式就是使用双大括号({{}})的文本插值:{{msg}} 将会被替换为对应数据对

2020-11-11 15:57:17 1485 8

原创 对象深拷贝的简单实现——JavaScript

深拷贝是相对于浅拷贝而言的,深拷贝与浅拷贝最大的不同就是对于引用类型的拷贝。浅拷贝:在修改新对象的引用类型时,原对象也会改变。(只是增加了一个指针指向已存在的内存地址)深拷贝:新对象与原对象完全独立,即修改新对象的属性时,原对象不会改变。(增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存)所以深拷贝的重点就是对于引用类型的拷贝。以下是深拷贝的简单实现:<!DOCTYPE html><html> <head> <meta

2020-11-11 11:27:46 296 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除