- 博客(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
348
原创 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
381
原创 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
416
原创 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
345
原创 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
183
原创 二叉树的遍历
前序遍历先根结点,前序遍历左子树,前序遍历右子树递归实现前序遍历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
92
原创 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
102
原创 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
141
原创 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
354
原创 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
194
原创 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
90
原创 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
95
原创 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
111
原创 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
97
原创 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
118
原创 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
92
原创 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
103
原创 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
70
原创 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
109
原创 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
160
原创 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
112
原创 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
71
原创 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
121
原创 排序算法-插入排序&希尔排序
插入排序首先第一个数是排好序的,然后将第二个数插入到第一个数,这样第一,第二这个两个数组成的子数组就是排序好的,接着在将第三个数插入到这个数组中,依次插入…到最后这个数组就行排序的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
76
原创 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
272
原创 排序算法-快速排序
重点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
75
原创 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
132
原创 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
122
原创 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
86
原创 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
77
原创 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
89
原创 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
1655
原创 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
100
原创 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
79
原创 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
102
原创 排序算法-大根堆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
217
原创 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
93
原创 javascript-for循环和setTimeout的特殊样例
前提事件循环机制:同步任务解决完,在解决异步的(即是任务队列里的)首先明确概念:任务分为微任务和宏任务,任务队列里面的任务都是宏任务(setTimeout,定时器,ajax,DOM操作),微任务:then(),只有一个微任务队列,任务队列(宏任务队列)可以有多个;微任务全部执行完后才执行宏任务。细致:同步代码执行完,首先会看看微任务队列中是否存在微任务,有的话就是取出来到主线程中执行,否则从任务队列中取出主任务到主线程执行。如果这时候,正在执行的宏任务产生了一个微任务,那么这个微任务放到微任务队列中,
2021-03-18 23:31:04
97
原创 javascript-Promise对象
状态PromiseStatePending Resolved(fulfilled) Rejected状态变化:Pending->Resolved,Pending->RejectedPromiseResult保存着对象成功或失败的结果resolve reject可以修改这个属性的结果特点状态不受外界影响,只有异步操作的结果才能改变一旦状态改变,就不会在变。流程入门样例<!DOCTYPE html><html lang="en"><h
2021-03-16 23:45:06
120
原创 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
58
空空如也
如何对二维vector结构体数组进行排序?
2020-10-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人