自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(161)
  • 问答 (1)
  • 收藏
  • 关注

原创 javascript-proxy对象

应用:修改数组的索引规则function newArray(...args) { let handler = { get: function (target, propKey, receiver) { let index = Number(propKey); if (index < 0) { propKey = String(target.length + index);

2021-04-28 08:20:17 223

原创 javascript-promise封装get&&post

function getRequest(url) { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.open('get', url, true); // true => 异步 xhr.onreadystatechange = function () { if (xhr.readyState == 4 &a

2021-04-28 01:47:46 251

原创 javascript-sleep函数

// 核心:setTimeoutfunction sleep(delay){ return new Promise((resolve, reject)=>{ setTimeout(()=>{ resolve(); }, delay); });}async function run(){ console.log("run time"); console.log(1); await sleep(1

2021-04-27 14:29:04 307

原创 javascript-基于Promise模拟实现ajax并发请求的控制

const asyncfunc = function (task, delay) { return new Promise((resolve, reject) => { setTimeout(() => { resolve(task); }, delay); });}// 模拟请求let tasks = [ () => asyncfunc("task1", 1000), () => asyn

2021-04-26 23:57:00 292

原创 javascript-JSON.stringify实现

function stringify(obj){ let res = ''; let cur; if (obj === null) { return String(obj); } switch(typeof obj){ case 'number': case 'boolean': return String(obj); case 'string': retu

2021-04-25 12:39:53 138

原创 二叉树的遍历

前序遍历先根结点,前序遍历左子树,前序遍历右子树递归实现前序遍历const preOrderVisit = function (root){ if (!root) return; console.log(root.val); preOrderVisit(root.left); preOrderVisit(root.right);}迭代+栈实现前序遍历const preOrderVisit = function(root){ let stack = [];

2021-04-23 15:44:59 56

原创 leetcode-二叉搜索树中第K小的元素

题目https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst/思路中序遍历实现中序遍历两种方法:1. 递归; 2:迭代code迭代// 迭代实现中序遍历var kthSmallest = function (root, k) { let stack = []; let res; while (root || stack.length) { if (root) {

2021-04-23 13:54:52 74

原创 leetcode-岛屿数量

题目https://leetcode-cn.com/problems/number-of-islands/思路遍历二维数组,若遇到一个陆地,res+1,但是为了不重复计算,将这个陆地周围跟他连通的并且也是陆地的值设置为’0’,也就是设置为水,这样就不会重复计算,设置为水的这个过程就是一个dfs过程,对陆地的四个方向进行dfs。code/** * @param {character[][]} grid * @return {number} */var numIslands = functio

2021-04-23 10:03:34 98

原创 javascript-深入理解js

title:date: 2021-03-30 14:40:41tags:- javascriptcategories:- javascript预编译函数作用域预编译创建AO对象(活动对象)找形参和变量的声明,作为AO对象的属性名,值为undefined实参和形参相互统一(也就是将实参的值赋给形参)找函数声明,如果与变量同名,会覆盖变量的声明function fn(a,c){ console.log(a); // function a(){} .

2021-04-22 13:45:11 299

原创 javascript-快速幂

快速幂2^8 = 2^4 * 2^4,时间复杂度:O(logn)code// 快速幂const bPow = function (a, b) { if (b == 0) return 1; else if (b % 2 == 1) { return a * bPow(a, b - 1); } else { let res = bPow(a, b / 2); return res * res; }}const bPo

2021-04-20 21:21:43 154

原创 leetcode-反转链表

题目https://leetcode-cn.com/problems/reverse-linked-list/思路递归:大问题拆成两个小问题,小问题和大问题有同样的解题步骤,存在最小子问题,本题中,在最小子问题就是只有一个节点的时候,也就是假如1->null就不必翻转,return 1出来即可,然后假设之前的连接为2->1->null,那么首先2->1->2,然后断开2->1,也就是2->1转化为2->null,所以就是成为1->2->nu

2021-04-20 16:08:58 61

原创 leetcode-二叉树的层序遍历

题目https://leetcode-cn.com/problems/binary-tree-level-order-traversal/思路队列,进入循环获取当前队列的节点个数,也就是上一层的节点个数,然后for循环对这些节点进行操作即可code/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val

2021-04-20 15:14:30 68

原创 leetcode-链表中倒数第k个节点

题目https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/思路快慢指针code/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** * @param {ListNode} head * @

2021-04-20 14:56:39 59

原创 leetcode-求根结点到叶节点数字之和

题目https://leetcode-cn.com/problems/sum-root-to-leaf-numbers/思路dfscode/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left)

2021-04-20 14:43:17 64

原创 leetcode-长度最小的子数组

题目https://leetcode-cn.com/problems/minimum-size-subarray-sum/思路滑动窗口,首先向右扩大窗口,若此时窗口内的值大于target,那么可以收缩窗口,即是从左边压缩,找到最小值并记录code/** * @param {number} target * @param {number[]} nums * @return {number} */var minSubArrayLen = function(target, nums) {

2021-04-20 14:27:50 67

原创 leetcode-最大子序和

题目https://leetcode-cn.com/problems/maximum-subarray/思路dp贪心code/** * @param {number[]} nums * @return {number} */var maxSubArray = function (nums) { // return greedy(nums); return dp_f(nums);};const greedy = function (nums) { le

2021-04-20 10:21:43 61

原创 leetcode-路径总和

题目https://leetcode-cn.com/problems/path-sum/思路dfsbfs + 两个队列code/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left)

2021-04-19 16:39:40 69

原创 leetcode-二叉树的所有路径

题目https://leetcode-cn.com/problems/binary-tree-paths/思路dfs + 递归dfs + 栈code/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null :

2021-04-19 10:58:42 47

原创 leetcode-javascript-二叉树的最大深度

题目https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/思路dfsbfs+队列code/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? n

2021-04-19 09:48:01 59

原创 leetcode-全排列

题目https://leetcode-cn.com/problems/permutations/思路dfs + 回溯bfs + 队列codevar permute = function (nums) { // dfs // let depth = 0; // let tags = new Array(nums.length).fill(false); // let res, tmp; // res = []; // tmp = [];

2021-04-18 23:28:51 126

原创 leetcode-javascript-合并两个有序数组

题目https://leetcode-cn.com/problems/merge-sorted-array/思路用双指针,分别指向两个数组,比较然后push到一个新的数组中,最后在把新数组的值赋值给nums1反向双指针:对两个数组进行比较,较大值放在num1数组后面,就不用使用到O(m+n)的空间复杂度code/** * @param {number[]} nums1 * @param {number} m * @param {number[]} nums2 * @param {nu

2021-04-18 21:38:09 84

原创 leetcode-最长回文子串

题目https://leetcode-cn.com/problems/longest-palindromic-substring/思路中心扩散法:分为两种情况,…aa…和…aba…,用ll和rr记录这个子串的边界,判断长度rr-ll+1获取最大即可/** * @param {string} s * @return {string} */var longestPalindrome = function(s) { if (s.length == 0) return s; let

2021-04-18 21:05:32 52

原创 leetcode-重排链表

题目https://leetcode-cn.com/problems/reorder-list/submissions/思路快慢指针找到中间节点将链表根据中间节点分成两个,对后面这个链表进行倒序然后在依次组合这两个链表code/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.

2021-04-14 16:49:01 65

原创 排序算法-插入排序&希尔排序

插入排序首先第一个数是排好序的,然后将第二个数插入到第一个数,这样第一,第二这个两个数组成的子数组就是排序好的,接着在将第三个数插入到这个数组中,依次插入…到最后这个数组就行排序的Code// 插入排序function insertSort(arr){ for (let i=1; i<arr.length; i++){ let temp = arr[i]; let j = i-1; while (j>=0 && te

2021-04-07 15:34:17 46

原创 leetcode-最小的k个数

题目https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/code快速排序var getLeastNumbers = function (arr, k) { if (k > arr.length) return []; heap_sort(arr, arr.length); return arr.slice(0, k);}最大堆/** * @param {number[]} arr * @para

2021-04-07 03:13:07 250

原创 排序算法-快速排序

重点partition函数返回的是当前数组第一个元素,经过排序后,所在的位置,即是最后排序结果的位置,这样就根据这个位置将数组分成了左右两边数组,然后分别对左右子数组进行排序即可Codefunction partition(arr, begin, end){ let k = arr[begin]; let left = begin + 1; let right = end; while(1){ while (left <= end &

2021-04-07 02:51:49 47

原创 javascript-Array.reduce,map,filter的实现

// map方法Array.prototype.arrMap = function (callback) { if (typeof callback !== "function") { return []; } else { let result = []; for (let i = 0, length = this.length; i < length; i++) { result.push(callback(

2021-04-02 00:06:55 101

原创 leetcode-比较版本号

题目https://leetcode-cn.com/problems/compare-version-numbers/solution/思路找到每个.分割的版本号,然后转换成数字进行比较code/** * @param {string} version1 * @param {string} version2 * @return {number} */var compareVersion = function (version1, version2) { let len1 = ve

2021-04-01 14:12:42 85

原创 leetcode-打家劫舍

题目https://leetcode-cn.com/problems/house-robber/思路一个房屋:那就偷他 =》边界两个房屋:那就偷他们之中的最大值 =》边界大于两个房屋(k>2)若偷第k间房子,那么不能偷第k-1的房子,所以结果为前K-2间房子的最大值+当前第k间房子的金额若不偷,那么结果就是前k-1间房子的最大值dp[i]表示第i间房子能偷到的最大值,方程:dp[i] = max(dp[i-1], dp[i-2] + arr[i]);code/** *

2021-03-30 18:52:51 61

原创 javascript-深拷贝

深拷贝不能解决对象循环引用的问题的版本let obj1 = { name:"chen", age: 18, arr: [1,3,4], fn: function(){ console.log(this.name); }}function deepCopy(obj){ if (typeof obj !== "object" || obj === null){ return obj; } let res =

2021-03-30 13:57:39 53

原创 leetcode-顺时针打印矩阵

题目https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/思路按照每层打印,外层打完,进内层;先打印上侧,右侧若:left<right&&top<bottom,说明存在下侧,左侧需要打印code/** * @param {number[][]} matrix * @return {number[]} */var spiralOrder = function (matrix) {

2021-03-30 00:01:28 60

原创 javascript-数字,字符串,对象,数组之间进行相加

前置首先,js数据类型转换为字符串String(),变量.toString(),(null,undefined没有toString方法),加上一个空字符串console.log(String(undefined)); // "undefined"console.log(String(null)); // "null"console.log(String(11)); // "11" console.log(String("aaaa")); // "aaaa"cons

2021-03-29 20:40:30 1528

原创 leetcode-括号生成

题目https://leetcode-cn.com/problems/generate-parentheses/思路递归生成,当做一颗树,每层加入一个)或(,这样子就可以用dfs把所有的组合列出来,因为是有效的括号,对树的每一层进行判断,当右括号数大于左括号数,不成立;当左括号数大于总数的一半,不成立。code/** * @param {number} n * @return {string[]} */function f(n,res,str, left, right){ if (

2021-03-29 12:42:13 67

原创 leetcode-二分查找

题目https://leetcode-cn.com/problems/binary-search/code/** * @param {number[]} nums * @param {number} target * @return {number} */var search = function(nums, target) { let begin = 0; let end = nums.length; while (begin <= end){

2021-03-29 11:50:25 51

原创 leetcode-字符串相加

题目https://leetcode-cn.com/problems/add-strings/思路大数相加,模拟code/** * @param {string} num1 * @param {string} num2 * @return {string} */var addStrings = function(num1, num2) { let len1 = num1.length-1; let len2 = num2.length-1; let add = 0

2021-03-29 11:36:17 72

原创 排序算法-大根堆c++ && javascript实现

知识点堆:一个完全二叉树;大根堆:除根结点外的所有节点,其节点的值小于等于父结点;小根堆:除根结点外的所有节点,其节点的值大于等于父结点;满二叉树:每个节点是叶节点或度为2完美二叉树:深度为k,节点个数为2^k-1个的二叉树完全二叉树:节点的编号与完美二叉树的编号一一对应function swap(tree, i, j){ let temp = tree[i]; tree[i] = tree[j]; tree[j] = temp;}function heapif

2021-03-28 01:37:07 168

原创 javascript-call,apply,bing

callfunction.call(thisArg, arg1,arg2,arg3…);第一个参数是可选的,表示function函数运行时使用的this值,如果指定为null,undefined时会默认转换化为全局对象(非严格模式),如果不指定的话,默认是全局对象(非严格模式),如果是严格模式下,则是undefined;第二个参数:列表返回值:使用给出的this和参数去调用function后得到的返回值,若函数没有返回值,则返回undefined注意:使用的时候function不需

2021-03-26 21:54:52 69

原创 javascript-for循环和setTimeout的特殊样例

前提事件循环机制:同步任务解决完,在解决异步的(即是任务队列里的)首先明确概念:任务分为微任务和宏任务,任务队列里面的任务都是宏任务(setTimeout,定时器,ajax,DOM操作),微任务:then(),只有一个微任务队列,任务队列(宏任务队列)可以有多个;微任务全部执行完后才执行宏任务。细致:同步代码执行完,首先会看看微任务队列中是否存在微任务,有的话就是取出来到主线程中执行,否则从任务队列中取出主任务到主线程执行。如果这时候,正在执行的宏任务产生了一个微任务,那么这个微任务放到微任务队列中,

2021-03-18 23:31:04 71

原创 javascript-Promise对象

状态PromiseStatePending Resolved(fulfilled) Rejected状态变化:Pending->Resolved,Pending->RejectedPromiseResult保存着对象成功或失败的结果resolve reject可以修改这个属性的结果特点状态不受外界影响,只有异步操作的结果才能改变一旦状态改变,就不会在变。流程入门样例<!DOCTYPE html><html lang="en"><h

2021-03-16 23:45:06 87

原创 leetcode-两数之和

题目https://leetcode-cn.com/problems/two-sum/思路暴力枚举哈希表,遍历nums数组,如果哈希表中存在一个数与当前数组索引的值相加等于target的话,那么返回即可,不存在就把数组元素压入表中,数组元素的值作为key,index作为表的value特殊数据:[3,3] target = 6, res = [0,1]Code var twoSum = function (nums, target) { var map

2021-03-16 00:17:08 34

空空如也

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

TA关注的人

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