自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 131. 分割回文串

/** * @param {string} s * @return {string[][]} */var partition = function(s) { let res = [] let path = [] const backTracking = function(s, startIndex){ if(startIndex === s.length){ res.push([...path]) r

2022-04-26 17:11:39 151

原创 39. 组合总和

/** * @param {number[]} candidates * @param {number} target * @return {number[][]} */var combinationSum = function(candidates, target) { let arr = candidates.sort((a,b) => a - b) let res = [] let path = [] const backTracking = funct

2022-04-25 22:51:45 157

原创 77. 组合

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 :输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]/** * @param {number} n * @param {number} k * @return {number[][]} */ // 回溯var combine = function(n, k) {

2022-04-24 19:30:19 269

原创 46. 全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 :输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]回溯算法var permute = function(nums) { let res = [] dfs([]) function dfs(path){ if(path.length === nums.length){

2022-03-29 21:47:06 236

原创 124. 二叉树中的最大路径和

路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。var maxPathSum = function(root) { let res = Number.MIN_SAFE_INTEGER function dfs(node){ if(!node) {return 0}

2022-03-29 19:26:46 419

原创 199. 二叉树的右视图

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例 :输入: [1,2,3,null,5,null,4]输出: [1,3,4]/*** 对于同一层的节点 当 res.length === depth 时存入数组,遍历到其兄弟时这两个就不相等了,所以同一层只会把最右面的放入数组*/var rightSideView = function(root) { let res = [] dfs(root, res, 0)

2022-03-28 15:24:58 271

原创 1248. 统计「优美子数组」

给你一个整数数组 nums 和一个整数 k。如果某个连续子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。请返回这个数组中 「优美子数组」 的数目。示例 :输入:nums = [1,1,2,1,1], k = 3输出:2解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。思路:oddIndexArray: 存放 nums 中所有的奇数的下标,另外将 -1 放入数组第一位,nums.length 放入最后一位。例如 nums=[1,2,2,3,5

2022-03-28 11:21:04 241

原创 187. 重复的DNA序列

给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。示例 1:输入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”输出:[“AAAAACCCCC”,“CCCCCAAAAA”]var findRepeatedDnaSequences = function(s) { let times = {} let i = 0 let res = [] whi

2022-03-27 18:50:48 121

原创 200. 岛屿数量

给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [[“1”,“1”,“1”,“1”,“0”],[“1”,“1”,“0”,“1”,“0”],[“1”,“1”,“0”,“0”,“0”],[“0”,“0”,“0”,“0”,“0”]]输出:1示例 2:输入:grid = [[“1”,“1”,“0”,“0

2022-03-27 17:00:31 52

原创 react mobx

npm i mobx mobx-react-liteimport { makeAutoObservable } from "mobx";class AppStore { constructor() { makeAutoObservable(this); } count = 0; changeCount = (num) => { this.count += num; };}const store = new AppStore();export defau

2022-03-26 18:18:25 1268

原创 稀疏数组和队列

稀疏数组当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模[0] 表示有6行7列共8个数据public class SparseArray { public static void main(String[] args) { // 创建 11 * 11 数组 // 0: 没有棋子 1 黑子 2 白子

2022-01-14 23:01:19 46

原创 css盒模型

盒模型<!-- CSS将页面中的所有元素都设置为了一个矩形的盒子将元素设置为矩形的盒子后,对页面的布局就变成将不同的盒子摆放到不同的位置每一个盒子都由一下几个部分组成:内容区(content)内边距(padding)边框(border)外边距(margin)--><style> .box1{ /* 内容区(content),元素中的所有的子元素和文本内容都在内容区中排列 内容区的大小由width 和 height两个属性来设

2022-01-05 12:43:45 43

原创 css flex

Flex 弹性盒、伸缩盒是CSS中的又一种布局手段,它主要用来代替浮动来完成页面的布局flex可以使元素具有弹性,让元素可以跟随页面的大小的改变而改变 - 弹性容器 - 要使用弹性盒,必须先将一个元素设置为弹性容器 - 我们通过 display 来设置弹性容器 display:flex 设置为块级弹性容器 display:inline-flex 设置为行内的弹性容器

2022-01-05 12:42:39 54

原创 2D\3D\动画\过渡

CSS3 2D转换2D 转换是改变标签在二维平面上的位置和形状移动: translate旋转: rotate缩放: scaletranslate移动x 就是 x 轴上移动y 就是 y 轴上移动transform: translate(x, y)transform: translateX(n)transfrom: translateY(n)2D 的移动主要是指 水平、垂直方向上的移动translate 最大的优点就是不影响其他元素的位置translate 中

2022-01-05 12:39:35 96

原创 css定位

定位定位是一种更加高级的布局手段,通过定位可以将元素摆放到页面的任意位置使用position属性来设置定位可选值:static 默认值,元素是静止的没有开启定位relative 开启元素的相对定位absolute 开启元素的绝对定位fixed 开启元素的固定定位​ sticky 粘滞定位相对定位当元素的position属性值设置为relative时则开启了元素的相对定位相对定位的特点:1.元素开启相对定位以后,如果不设置偏移量元素不会发生任何的变化2.相对定位是参照于元素本来在

2022-01-05 12:36:42 63

原创 css浮动

通过浮动可以使一个元素向其父元素的左侧或右侧移动使用 float 属性来设置于元素的浮动可选值:none 默认值 ,元素不浮动left 元素向左浮动right 元素向右浮动注意,元素设置浮动以后,水平布局的等式便不需要强制成立元素设置浮动以后,会完全从文档流中脱离,不再占用文档流的位置,所以元素下边的还在文档流中的元素会自动向上移动。任何元素加浮动后变成行内块元素。如果块元素没有设置宽度,默认与父元素一样宽,加了浮动后,宽度由内容决定浮动常和标准盒子一起用,一般页面垂直布局都用标准盒子,每个

2022-01-05 12:35:10 340

原创 css选择器

复合选择器<style> /* 交集选择器 作用:选中同时复合多个条件的元素 语法:选择器1选择器2选择器3选择器n{} 注意:交集选择器中如果有元素选择器,必须使用元素选择器开头 */ /*元素标签是div并且类是red*/ div.red{ /* 将class为red的div字体大小设置为30px */ font-size: 30px; } .a.b.c{ color: blue } /* div#box{} */ /

2022-01-05 12:32:51 170

原创 数据结构_线性表

顺序结构存储顺序表元素地址连续、类型相同,可以用一位数组表示。但是顺序表长度随着增加和删除是可变的,所以另需一个变量记录数组长度。#define LIST_INIT_SIZE 100typedef struct{ ElemType elem[LIST_INIT_SIZE]; int len;}SqList;#define MAXSIZE 100typedef struct{ ElemType *data; int length;}SqList;// 创建时

2021-12-31 22:57:54 393

原创 JAVA_String

字符串对象创建后不能被改变String s = "asd";String s1 = "asd";String s2 = new String("asd")System.out.println(s==s1); // trueSystem.out.println(s==s2); // falseSystem.out.println(s.equals(s2); // true 字符串存储在字符串常量池中,首先来到s他在常量池里找有没有abc,没有则创建一

2021-12-22 11:24:25 59

原创 多级数组树状菜单

let rootList = [ {id: 1, parent: null,text: "1"}, {id: 11, parent: 1,text: "1-1"}, {id: 12, parent: 1,text: "1-2"}, {id: 2, parent: null,text: "2"}, {id: 21, parent: 2,text: "2-1"},]function getTreeList(rootList, id, list){ for(let item of rootLis

2021-11-23 10:57:55 84

原创 输入url到看到网页经历了什么

URL解析URL编码例如 https://csdn.net?name=张三&from=https://www.baidu.com 这样的 url 中有中文和 url,他识别可能会出问题,所以要编码和解码。对整个 url 编码解码:encodeURI、decodeURI。处理空格、中文等对传参编码解码:encodeURIComponent、decodeURIComponentlet url = `https://csdn.net?name=${encodeURIComponent(张三

2021-11-14 21:10:43 1754

原创 循环语句性能

for & while基于 var 声明时,性能差不多。基于 let 声明时,for 性能更好。forEach性能差一些arr.forEach((item)=>{}, obj) obj 是每一轮回调的 thisArray.prototype.forEach = function(callback){ let arr = this let len = arr.length let args2 = arguments[1] || window // forEach 第

2021-11-06 21:34:37 48

原创 数据类型检测

typeoftypeof null = “object”typeof 是基于数据存储的二进制值进行判断。对象类型的二进制前三位都是 0,而 null 存储时二进制是全 0,所以 typeof 就给他判断为 object 了。同理任何类型的对象,例如日期、正则、数组等他都判断为 object。instanceof检测当前实例是否属于这个类,根据原型链进行检测。instanceof检测原理instanceof 不能检测基本类型: 1 instanceof Number 返回 false// 模

2021-11-06 12:49:13 155

原创 echarts组件封装

<template> <!-- 为 ECharts 准备一个定义了宽高的 DOM --> <div :id="uuid" :style="style"></div></template><script>import * as echarts from "echarts";const genID = () => new Date().getTime();export default { props: {

2021-11-05 19:18:25 234

原创 cookie/session/token

意义http 协议是无状态协议,cookie 和 session 来实现状态的记录特征都是由服务器生成,存储键值对session 存储在服务器,cookie 返回给客户端。响应信息头有 set-cookie 字段。一般来说 SessionID 会以类似 cookie 的方式返回给客户端。SessionID 是服务器用来识别、操作存储 session 值的对象的。一般来说 session 在服务器端有文件方式、数据库方式等存储方式。SessionID 是用来识别文件或数据库某个记录的。客户端在发

2021-10-31 20:09:53 52

原创 238. 除自身以外数组的乘积

除了自己的所有乘积可以看为自己左边的所有元素乘积与右边的所有元素乘积相乘。创建一个数组记录每一项所有左边元素的乘积。之后再倒序计算每项右边元素的乘积,同时乘上左边的。第二次就不用新开一个数组记录右边的乘积了,用一个变量就行,算一次就直接与left数组相乘拿到最后结果。/** * @param {number[]} nums * @return {number[]} */var productExceptSelf = function(nums) { // 左边 let left = []

2021-10-23 14:53:04 72

原创 514. 自由之路

举例:输入: ring = "godding", key = "gd"输出: 4/** * @param {string} ring * @param {string} key * @return {number} */var findRotateSteps = function(ring, key) { // 存储 ring 中每个字母出现的 index /*{g: [0], o: [1], d: [2, 3], ...} */ const indexMap = {}

2021-10-23 11:52:56 43

原创 403. 青蛙过河

/** * @param {number[]} stones * @return {boolean} */var canCross = function(stones) { const set = new Set() // 记忆化存储,降低时间复杂度 return h(stones,0,0,set) // 初始在石头0,上一次跳了0步};function h(stones, index, k, set){ const key = index * 1000 + k

2021-10-22 19:13:53 138

原创 最长连续递增子序列

给一个数字数组,给出连续递增的最大长度。(相邻的相等算1)// 空间O(1) 时间O(n)function h(arr){ let res = 1 let max = 1 for (let i = 1;i < arr.length; i++) { if(arr[i] > arr[i-1]){ res ++ }else if(arr[i] === arr[i-1]){ continue }else{ max =Math.max(res,max) re

2021-10-21 21:56:04 42

原创 刷房子最小花费

房子1房子2…红1411+min(2,11)…蓝214+min(14,11)…绿115+min(14,2)…维护一个二维数组 res,res[i][j]表示该房子染某种颜色需要的最少钱。初始化房子一的三种颜色,之后房子二染红色需要的钱为min(房子一染蓝,房子一染绿)+房子二染红,以此类推。function h(cost, n){ let res = [] res[0] = new Array(n) res[1] = new Array(...

2021-10-21 18:25:24 44

原创 青蛙跳石头

创建数组 f[i] 表示青蛙是否能够跳到石头 i,初始时 f[0] = true,依次计算 f[i]。青蛙能否跳到石头 i,需要找到从石头 0 到石头 i-1 中是否存在石头 j ,青蛙能跳到石头 j 并且能从石头 j 跳到石头 i。function frog(arr){ const length = arr.length if(!arr || length === 0){ return false } let res = new Array(length).fill(false) re.

2021-10-21 12:19:16 313

原创 浏览器事件循环

为什么 js 在浏览器中有事件循环JS 是单线程的。如果一个线程操作一个 DOM 节点,另一个要删除这个 DOM 节点,会冲突。所以如果想执行一些异步的代码,要通过 event-loop 来处理两种任务宏任务整体代码定时器I/O微任务Promise.then() 中的回调MutationObserver为什么要有微任务因为宏任务永远是先进先出,但是有的任务优先级高需要立即执行。执行规则先执行宏任务之后去执行其中遇到的所有微任务和这些微任务中的微任务。完成后再去下一轮宏任务。Nod

2021-10-18 18:01:08 40

原创 vue事件总线

// eventBus.js// new 一个 Vue 实例,实例上有 $emit $on $off 事件import Vue from 'vue'const eventBus = new Vue()export default eventBuseventBus.$emit('handleTime', this.time) // 触发 handleTime 事件并传参// 其他组件监听事件的触发mounted(){ eventBus.$on('handleTime', this.hah

2021-10-18 11:22:41 46

原创 vue跨域

// vue.config.jslet proxyObj = {}proxyObj['/'] = { ws: false, // websocket target: "http://localhost:8081", changeOrigin: true, pathRewrite: { '^/': '/' }}module.exports = { devServer:{ host: 'localhost', port: 8080, // 前端端口 proxy: p

2021-10-17 21:33:04 42

原创 axios ele-ui 二次封装

import axios from 'axios'import {Message} from 'element-ui'import router from '../router'axios.interceptors.response.use(success=>{ // 请求发送给服务端了,但有的操作可能服务端不允许 if(success.status && success.status == 200){ if(success.data.code == 500 || su

2021-10-17 21:10:04 65

原创 3. 无重复字符的最长子串

var lengthOfLongestSubstring = function(s) { let set = new Set() let i = 0, j = 0, maxLength = 0 let length = s.length for(i; i<s.length;i++){ if(!set.has(s[i])){ set.add(s[i]) maxLength = Math.max(set.si.

2021-10-17 17:26:50 35

原创 2. 两数相加

var addTwoNumbers = function(l1, l2) { let head = new ListNode() let current = head let carry = 0 // 是否进位 while(l1 !== null || l2 !== null){ let sum = 0 if(l1 !== null){ sum += l1.val l1 = l1.next

2021-10-17 10:06:59 57

原创 1. 两数之和

最后一条:因为 map.has() 是根据 key 判断的var twoSum = function(nums, target) { const map = new Map() for(let i = 0; i < nums.length; i++){ let complement = target - nums[i] if(map.has(complement)){ return [map.get(complement), .

2021-10-16 22:51:42 34

原创 最小编辑长度

最小编辑长度给两个字符串 raple 和 apple,通过对字符串1做增删改操作,使其变为字符串2,求最少的操作次数。本例中,对 raple 删掉 r 再增加 p 就可以变为字符串2,需要两次操作即可。首先用两个指针指向两字符串尾若当前两指针指向的字符相同,则均向前移一位两指针指向的字符不同那么可以对字符串1做三种操作来匹配字符串2(1) 替换:直接将i指向的字符替换为j指向的字符。之后将两指针均前移一位。(2) 插入:在 i 指向的字符后面插入 j 指向的字符,所以 i 后面的

2021-09-24 12:45:41 56

原创 背包最大价值问题

背包最大价值问题有容量为 4 的背包,有三个物品,属性用两个数组分别表示每个物品的体积和价值vol=[2,1,3]val=[4,2,3]vol = [2, 1, 3]\\val = [4, 2, 3]vol=[2,1,3]val=[4,2,3]求背包能装下的最大价值定义二维数组let vol = [2, 1, 3];let val = [4, 2, 3];function dp(S, i) { if (i === 0) { if (S >= 2) { // 能装

2021-09-23 11:37:07 374

空空如也

空空如也

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

TA关注的人

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