自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

whitsats的博客

deadline是第一生产力

  • 博客(51)
  • 收藏
  • 关注

原创 [JavaScript数据结构] 栈的实现及应用

开始栈是一种特殊的线性表,仅能够在栈顶进行操作,有着**先进后出(后进先出)**的特性。下面这张图为栈的工作特点:从数据存储的角度看,用JavaScript实现栈有两种方式,一种是以数组做基础,一种是以链表做基础,本节中,我们使用数组实现栈。链表会作为单独的数据结果进行介绍。我们先定义一个简单的Stack类function Stack(){ var items = []; // 用数组存储数据}数据会存储在 items数组中,现在,这个类没有任何的方法。栈的方法栈的方法有以下几种p

2020-06-10 15:43:48 293

原创 [算法基础] 序言

算法基础目录

2020-05-22 13:08:06 303

原创 [Python系列] Python函数及函数式编程(一)

第一章 函数本章主要系统的学习Python函数的基本内容.函数是Python甚至所有的高级语言都支持的语言特征,Python不仅可以灵活的定义函数,而且自身还内置以许多实用的函数,给我们的开发带来了极大的便利.举一个简单的例子,我们知道圆的面积计算公式为如果让你计算一个半径为10的圆的面积,你可能这样实现r1 = 10s1 = 3.14*r1*r1圆的半径变了,你就需要重复的去书...

2019-05-09 16:34:06 478

原创 [Vue系列] Vue功能的简单实现

Vue功能的简单实现第一章 前言第二章 MVC和MVVM2.1 MVC2.2 前端渲染vs后端渲染2.3 前端MVC2.4 前端MVVM第三章 Vue功能 --- 数据绑定第四章 Vue功能 --- 双向数据绑定

2019-04-15 11:36:58 1406 3

原创 CSS3 媒体查询与响应式布局

第一章 序论现今每天都有更多的手机和平板电脑问市。消费者能够拥有可想象到的各种规格和形状的设备,但是网站开发人员却面临一个挑战:如何使他们的网站在传统浏览器、手机和平板电脑浏览器上有很好的效果,如何在各种大小的屏幕上提供一流的用户体验?答案是:采用响应式设计。响应式设计可以随所显示的屏幕大小而改变。实现响应式设计的主要方法是使用 CSS 媒体查询。Bootstrap的栅格系统就是通过媒体查询来实现的。第二章 回顾媒体类型 media typeHTML4 和 CSS2支持根据媒体类型(media

2020-11-04 18:59:50 534

原创 Mongodb 入门

Mongodb第一章 前言1.1 知识体系分析前端工程师:Web前端,也就是在Web应用中用户可以看得见碰得着的东西。包括Web页面的结构、Web的外观视觉表现以及Web层面的交互实现。后端工程师:与数据库进行交互以处理相应的业务逻辑,提供数据供前端显示。需要考虑的是如何实现功能、数据的存取、平台的稳定性与性能等。1.2 mongodb概述mongodb 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。mongodb

2020-10-24 08:51:57 244

原创 [算法基础] 堆相关-数组中前K个高频元素

题目给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]解题思路本题和上一题基本类似,都可以使用小顶堆处理,只是上一题第一步是对大小进行排序,构建小顶堆的时候可以借助堆的特性直接得出结果,而本题需要对出现频率进行排序。排序方式很简单,只需要在遍历数组的时候记录频率即可。我们可以使用map在遍历的过程中记录元素值和出现的频率。

2020-09-15 20:20:28 210

原创 [算法基础] 堆相关-数组中第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 ≤ 数组的长度。解题思路...

2020-09-02 14:36:47 217

原创 [算法基础] 栈相关-去除重复字母

题目给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例 1:输入: "bcabc"输出: "abc"示例 2:输入: "cbacdcbc"输出: "acdb"解题思路首先我们要明确什么是字典序,字典序就是指从前往后比较两个字符串的方法。首先比较的是首字符,如果不同,则第一个字符较小的字符串更小如果第一个字符相同,则依次比较第二个字符,直到能够比较出大小为止在示例1中,bcabc

2020-09-01 11:35:03 468

原创 [算法基础] 栈相关-基础计算器

题目实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。示例 1:输入: "1 + 1"输出: 2示例 2:输入: " 2-1 + 2 "输出: 3示例 3:输入: "(1+(4+5+2)-3)+(6+8)"输出: 23说明:你可以假设所给定的表达式都是有效的。请不要使用内置的库函数 eval。解题思路我们首先可以将加法和减法都看作加法运算,运算符用1和-1这两个sign来进行

2020-08-31 18:18:53 125

原创 [算法基础] 栈相关-最小栈

题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,nu

2020-08-31 11:20:47 134

原创 [算法基础] 栈相关-最长有效的括号

题目给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"解题思路我们可以通过栈,在遍历给定字符串的过程中,判断到目前位置的子串的有效性。然后更新最长的有效长度。具体做法对于遇到的每一个(,我们将他的下标放入栈中。当扫描到),则弹出一个次,并记录有效长度为:当前索引 - 出栈索引 + 1,更

2020-08-21 11:59:00 159

原创 [算法基础] 栈相关-有效的括号

题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true]示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false示例 4:输入: "([)]"输出: false示例 5:输入: "{[]}"输出: true解题思路从题中

2020-08-20 12:09:28 139

原创 [算法基础] 数组操作-使数组唯一的最小增量

题目给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1。返回使 A 中的每个值都是唯一的最少操作次数。示例 1:输入:[1,2,2]输出:1解释:经过一次 move 操作,数组将变为 [1, 2, 3]。示例 2:输入:[3,2,1,2,1,7]输出:6解释:经过 6 次 move 操作,数组将变为 [3, 4, 1, 2, 5, 7]。可以看出 5 次或 5 次以下的 move 操作是不能让数组的每个值唯一的。解题思路我们可以采用排序计数法。将数

2020-08-18 15:21:24 171

原创 [算法基础] 数组操作-矩阵置零

题目给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例 1:输入: [ [1,1,1], [1,0,1], [1,1,1]]输出: [ [1,0,1], [0,0,0], [1,0,1]]示例 2:输入: [ [0,1,2,0], [3,4,5,2], [1,3,1,5]]输出: [ [0,0,0,0], [0,4,5,0], [0,3,1,0]]解题思路先遍历一遍

2020-08-17 11:19:54 224

原创 [算法基础] 数组操作-螺旋矩阵

题目给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]输出: [1,2,3,4,8,12,11,10,9,5,6,7]解题思路根据输出结果可知,输出顺序是右,下,左,

2020-08-14 16:03:26 254

原创 [算法基础] 数字操作-各位相加

题目给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。示例:输入: 38输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。解题思路思路一 暴力求解法顾名思义,我们只需将数值转换为字符串,每一位进行求和操作即可,递归结束的判断依据是和小于10./** * @param {number} num * @return {number} */var addDigits = function(num)

2020-08-14 14:50:25 1622

原创 [算法基础] 数字操作-阶乘后的零

题目给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.解题思路我们寻找阶乘后结尾的零,肯定不能直接计算该阶乘,容易导致溢出。但是我们知道,末尾的0 一定是一对 2和5贡献的,而2在阶乘中作为因子的数量是远远多于5 的,这其实就要求我们取寻找5的个数。因子5会出现在5 的整倍数中5 的幂次方倍数中我们在计算时,只需要将给定的数值

2020-08-11 16:04:53 433

原创 [算法基础] 数字操作-字符串相乘

题目给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例 2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1 和 num2 的长度小于110。num1 和 num2 只包含数字 0-9。num1 和 num2 均不以零开头,除非是数字 0 本身。不能使用任何标准库的大数类型(

2020-08-11 10:59:08 1921

原创 [算法基础] 数字操作-回文数

题目判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数解题思路解法一 字符串反转法负数肯定不是回文数,我们只需要将给定的数转换为字符串然后进行反转对比即可。/**

2020-08-10 15:54:35 332

原创 [算法基础] 数字操作-字符串转换成整数

题目请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一个

2020-08-06 15:33:53 809

原创 [算法基础] 数字操作-整数反转

题目给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。解题思路思路一 按部就班我们只需要按照首先判断这个数的符号/** * @param {number} x * @re

2020-08-06 14:12:46 398

原创 [算法基础] 字符串操作-划分字母区间

题目字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。示例 1:输入:S = "ababcbacadefegdehijhklij"输出:[9,7,8]解释:划分结果为 "ababcbaca", "defegde", "hijhklij"。每个字母最多出现在一个片段中。像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。提示:S的长度在[1,

2020-06-22 17:18:56 346

原创 [算法基础] 字符串操作-最长公共前缀

题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。解题思路...

2020-06-22 16:18:28 380

原创 [算法基础] 字符串操作-Z字形变换

题目将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入: s =

2020-06-19 11:06:59 463

原创 [算法基础] 区间合并-合并区间

题目给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。解题思路合并区间问题中,我们同样也可以使用双指针进行解题。对边界进行排序,设置两个指针,一个指针savePoi

2020-06-17 15:38:30 806

原创 [算法基础] 快慢指针遍历-链表的中间结点

题目给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next

2020-06-16 14:25:26 155 1

原创 [算法基础] 快慢指针遍历-快乐数

题目编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1解题思路本题可以使用快慢指针的方

2020-06-15 15:29:40 177

原创 [JavaScript数据结构] 队列的实现及应用

开始队列是一种特殊的线性表,其特殊之处在于,它只允许你在队列的头部删除元素,在队列的末尾添加新的元素。左侧是队列的头部,右侧是队列的尾部,新的元素如果想要进入队列,只能从尾部进入,如果想要出队列,只能从队列的头部出去。队列的实现有了栈这个数据结构做铺垫,队列就容易学习了数据存储同栈一样,我们的队列也用数组来存储数据,定义一个简单的类Queue。function Queue(){ var items = [];}数据将存储在items数组之中。队列的方法队列的方法如下enqu

2020-06-15 14:45:29 225

原创 [算法基础] 快慢指针遍历-环形链表

题目给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。示例 3:输入:head = [1], pos =

2020-06-12 18:23:15 200

原创 [算法基础] 双指针遍历/滑动窗口- 长度最小的子数组

题目给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。示例:输入: s = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。进阶:如果你已经完成了O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。解题思路本题同样可以使用双指针进行解答。我们可以通过双指针维护一个滑动的窗口。设置

2020-06-11 07:01:05 152

原创 [算法基础] 双指针遍历/滑动窗口-买卖股票的最佳时机

题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。示例

2020-06-10 11:47:06 297

原创 [算法基础] 双指针遍历/滑动窗口-接雨水

题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6解题思路仔细观察本图,我们可以得知,在数组的i位置,能够接到的雨水的量,取决于当前元素左侧高度的最大值和右侧高度的最大值较小的那一个。能够接到的水量,为较小的高度最大值减去它自身

2020-06-09 15:46:57 204

原创 [算法基础] 双指针遍历/滑动窗口-删除排序数组中的重复项

题目给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原

2020-06-09 07:29:34 242

原创 [算法基础] 双指针遍历/滑动窗口-最接近的三数之和

题目给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示:3 <= nums.length <= 10^3-10^3 <= nums[i] <= 10^3-10^4 &lt

2020-06-07 17:39:59 167

原创 [算法基础] 双指针遍历/滑动窗口-三数之和

题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]解题思路方法一 暴力求解由题干可知,我们需要寻找的是三个数,那就使用三重循环嵌套最为直观/** * @param {nu

2020-06-05 11:51:25 389

原创 [算法基础] 双指针遍历/滑动窗口-盛最多水的容器

题目给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。示例:输入:[1,8,6,2,5,4,8,3,7]输出:49解题思路本题求的是最多水的容器,从图例可得,其实求的是“面积”。面积的计算公式为数值在数组中的间隔x两侧数值较小者。方法一 暴力求解我

2020-06-05 00:59:48 177

原创 [算法基础] 双指针遍历/滑动窗口-无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

2020-06-03 16:23:47 203

原创 [算法基础] 链表操作-反转链表

题目反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?解题思路方法一 迭代法我们知道,链表的指向是由头节点一直指向尾节点,最终指向null的,我们可以创建两个指针,第一个指针reverse指向null,第二个指针cur.从head头部开始遍历链表,每次遍历都将cur的next指向reverse,同时将c

2020-05-29 18:27:17 168

原创 [算法基础] 链表操作-旋转链表

题目给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NULL示例 2:输入: 0->1->2-&g

2020-05-27 07:29:13 243

空空如也

空空如也

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

TA关注的人

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