自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 photoshop生成器引入到electron项目(electron与photoshop建立通信)

generator-core就是它的源码,因为electron的主进程是nodejs环境,所以如果可以将core这套代码在electron的主进程中运行,就达到我们建立electron与ps通信的一个目的了,同时生成器的功能也更加强大,可以做一些异步操作,以及获取图像原始数据。这里0.1.0有报错,全局搜了一下0.1.0,发现读的是electron的package.json,直接复制core的package.json进去,修改指向的路径。-v -f的报错解决,但控制台打印出现问题。把这里注释掉,问题解决。

2023-08-08 13:47:55 1028

原创 从零搭建一个react + electron项目

electron、react、项目搭建、配置

2023-08-03 15:46:52 1446 2

原创 leetcode 6 Z 字形变换 TypeScript

leetoce 6 Z 字形变换 TypeScript思路:**暴力法:**初始化二维数组strs,遍历字符串,将字符串的字母放到数组指定位置,遍历√作为一个循环循环为 直下+右斜上 (右斜上遍历时注意最后不要包含下一个循环的顶点),就是反转的N形的前两笔另外还有数学找规律的方式 有空更function convert(s: string, numRows: number): string { if (numRows === 1) return s; let n = s.len

2022-04-04 21:06:18 1144

原创 leetcode 41 缺失的第一个正数 TypeScript

leetcode 41 缺失的第一个正数 TypeScript思路:原地哈希 假设值为n,则将值为n的数换到数组下标index为n-1的位置由于下标index>=0 且 index<arr.length,所以仅对正数、且在数组长度范围的值进行哈希再通俗点说,1放到下标0位置,2放到下标1位置,…以此类推最后从0遍历哈希表,如果缺失当前index对应的值index+1,直接返回结果即可function firstMissingPositive(nums: number[]): num

2022-04-02 13:56:33 651

原创 leetcode 22 括号生成 TypeScript

思路:首先题目默认的左右括号数量是相同的,题目要求组合成所有可能的合法括号所以基本思路可以定为 dfs + 回溯深度优先遍历(dfs),3个参数分别代表 左括号剩余、右括号剩余、当前拼接的字符串终止条件为:当左右括号都清空时终止条件上一定要左括号先入,否则就是不合法的代码如下:function generateParenthesis(n: number): string[] { const res = []; const dfs = (left, right, curStr.

2022-03-31 10:07:12 322

原创 leetcode 128 最长连续序列 TypeScript

leetcode 128 最长连续序列 TypeScript思路:题目要求时间复杂度O(n)解决,所以排序思路pass可以先将数组new Set去重,接下来对set集合进行遍历,判断当前数nums[i] - 1是否存在于set中,如果没有num-1才进行连续序列的查找,从而确保该数是当前连续序列的起点,此时开始计数,通过while不断查找currentNum+1是否存在于set中,最终计算出最大的长度返回代码如下:function longestConsecutive(nums: number

2022-03-26 12:30:15 874

原创 堆排序时间复杂度计算

堆排序传入两个参数arr 以及当前arr截取的需要排序的长度n首先是进行建堆,第二步将末尾结点替换根结点,对长度截取数n减去1再进行建堆代码如下:function heapify(arr,n,i){ //arr数组 n表示当前堆大小也就是arr截取的长度 i表示当前维护的三角堆顶下标 let left = i * 2 + 1; let right = i * 2 + 2; let maxindex = i; if(left<n&&arr[m

2022-03-20 15:48:23 1808 1

原创 leetcode 54 螺旋矩阵 JavaScript

leetcode 54 螺旋矩阵 JavaScript思路:用4条边界线约束遍历范围分别定义top、bottom、right、left四条边界线,代表遍历的边界范围,之后按照上右下左的顺序进行螺旋遍历举个例子,一开始先走1、2、3、4此时第一行已经遍历完成,需要对上边界top++,继续遍历8、12 右边4 8 12遍历完成,right–继续遍历11、10、9 下边遍历完成,bottom–之后是5,碰到top了,完成,left++,以此类推直到遍历完成/** * @param {number

2022-01-17 01:45:55 352

原创 leetcode 200 岛屿数量 JavaScript

leetcode 200 岛屿数量 JavaScript思路:BFS/DFS找岛屿 所有1连成的算一个岛屿,因此很明显需要用到BFS/DFS来解决,下面写的是DFS那么要考虑一个问题,就是要在岛屿+1的同时,把周围的1都进行标记,假设标记为2直到岛屿所有的1都变为2再直到整个图递归完成/** * @param {character[][]} grid * @return {number} */var numIslands = function (grid) { let isla

2022-01-17 01:34:38 517

原创 leetcode 92 反转链表Ⅱ JavaScript

leetcode 92 反转链表Ⅱ JavaScript思路:和206反转链表一样的思路,只是需要多记录一下反转前的上一个节点lPre也就是1反转时cur表示当前遍历的节点,pre表示cur的上一个节点反转完成时,pre指向反转链的最后一个也就是4,cur指向反传链下一个也就是5此时我们要做的是 2连接5,1连接4 完成在实现过程中,可能会遇见边界问题,也就是left=1时的情况同样举个例子,1-2-3-4-5反转1-4此时反转链 没有 上一个节点 咋办 只能把lPre也放在1这个位置那么

2022-01-14 00:54:17 359

原创 leetcode 103 二叉树的锯齿形层序遍历 JavaScript

leetcode 103 二叉树的锯齿形层序遍历 JavaScript思路: 依旧是传统层序遍历做法BFS + 队列首先要搞懂层序遍历是如何实现的:我这里写了一篇可以参考一下:leetcode 102 二叉树的层序遍历 JavaScript这篇文章代码中有详细注释之后我们只需要在这个基础上加一个是否反转的判断即可那么这里又使用了一个巧妙的方法,按照思路来说,原本是应该让他真正锯齿形遍历,也就是3-20-9-15-7,但这样代码层面会有冗余而且需要指针定位到当前遍历层的尾部(因为queue在遍历

2022-01-12 01:06:38 114

原创 leetcode 102 二叉树的层序遍历 JavaScript

leetcode 102 二叉树的层序遍历 JavaScript4个月没刷 层序遍历都差点没敲出来…特此记录思路: BFS+队列首先层序遍历要求我们一行一行读取 从左往右将节点进行遍历,这时需要用到队列(先进先出)每次放进队列queue的都是同一层节点,下一次循环queue就会换成下一层的节点内容但是queue在遍历某一层的过程中,就要顺便把他的左右子节点push进队列queue中,所以这里需要一些巧妙的方法去解决(在代码中会有备注)/** * @param {TreeNode} root

2022-01-12 00:25:25 106

原创 react-redux从零手写求和案例

目前正在学习尚硅谷的react 觉得react-redux稍微有点绕,特此写文章捋清思路1、安装和构建redux相关文件安装:npm i redux -Snpm i react-redux -Snpm i react-thunk -S构建:1、进入src文件夹 创建redux目录2、redux中需要的东西有:constant.js 用于定义常量count_action.js 用于声明接下来要对redux执行的动作 比如+1操作,则为{type:‘increment’,data:1}

2022-01-08 23:04:49 503

原创 leetcode 322 零钱兑换 JavaScript

leetcode 322 零钱兑换 JavaScript思路:dp解法(因为最近都在练dp)首先dp[i]=n表示总金额为i时,需要的硬币个数为n,我们假设coin为coins的某个数,也就是某个面值的硬币那么对于取硬币会有一个非常明显的特点,也就是取出一颗少一颗这个特点对于理解dp[i]=min(dp[i],dp[i-coin]+1)非常关键为什么是dp[i-coin]+1呢假设目标金额为10,当你要取一个面值为2的硬币,那么剩下的硬币要凑齐8 所以dp[10]=1+dp[8],其中1代表

2022-01-04 02:02:35 497

原创 leetcode 300 最长递增子序列 JavaScript

leetcode 300 最长递增子序列 JavaScript思路:首先确定一个数为本次遍历的末尾,之后从其前面开始寻找递增的子序列,从而获取长度,对比每次遍历的长度,取最大的值即可。本次思路讲一下动态规划的实现方法首先要确定dp用二维还是一维因为要找最长递增,在第二层遍历中,肯定要以0开始,所以用dp[i]即可那么这里 dp[i]代表,以第 i + 1个数结尾的 最长上升子序列的长度(0<=i<nums.length-1)也就是 比如说第3个数为结尾,从nums[0]到nums

2022-01-01 23:22:38 754

原创 在浏览器上debug nodejs的代码

对于nodejs,官方有说明关于debug的一些方法,下面介绍比较常用的一种方式:在浏览器中进行调试(在浏览器更为直观,且能看见每个步骤对应的内容)步骤如下:1、准备好要执行的js文件2、执行 node --inspect-brk xxx.js![在这里插入图片描述](https://img-blog.csdnimg.cn/02446acbc61c410caa8c9075ef37d3f0.png3、打开edge浏览器 输入网址edge://inspect/#devices (chrome则为c

2021-12-31 01:10:49 697

原创 leetcode 19 删除链表的倒数第N个节点 JavaScript

leetcode 19 删除链表的倒数第N个节点 JavaScript思路:快慢指针一次遍历以图为例,设start end 两个指针,首先让end指针先移动2(因为n=2)步,这样end永远比start快两个节点,之后start和end同时移动,当end的下一个节点为空时停止循环,此时start=3 end=5,就可以做删除操作了那么这里还有一种情况就是 如果链表一开始就不够长呢?(长度为0或1)直接返回head.next即可,举个例子,链表为[1],则end在移动完之后会到null的位置,此时要

2021-12-30 23:42:30 464

原创 leetcode 160 相交链表 JavaScript

leetcode 160 相交链表 JavaScript思路:本次使用的解法为双指针法,首先指针p1指向headA(4),p2指向headB(5),当p1与p2没相遇时while循环,每次移动一格直到走到末尾(5),此时再next就为null了 让p1指针到headB去继续遍历;同理p2走到末尾(5)时next走向headA,如此循环反复直到相遇,即在8这个节点,简单分析一下为什么可以这样做呢?末尾(5)同时连接headA和headB此时我们可以把整个相交链表看成是:两个相交环而目的是 找环入口

2021-12-28 01:25:49 405

原创 leetcode 206 反转链表(递归)JavaScript

leetcode 206 反转链表(递归)JavaScript在之前写的文章里,用的是迭代实现反转链表,由于之前一直不理解递归如何实现,如今抽空研究了一番,理解思路后,特此回来写一下文章。递归的要点在于最深处时的判断条件,也就是最开始那个if里面一定要卡住,并将结果进行return,然后向上不断地返回得到结果。var reverseList = function(head) { if (head == null || head.next == null) { return he

2021-11-21 01:49:27 1021

原创 JavaScript 判断数据类型

JavaScript 判断数据类型首先JavaScript基本数据类型有:number null undefined string boolean es6以后还新增了bigint和symbol(上面的都是小写!!!就比如String和string是不一样的 typeof String是function 也就是 大写开头的是js对象 小写的才是类型)判断类型的方法有:1、typeof可判断:number undefined string boolean function注意:null RegExp

2021-11-16 18:53:10 696

原创 Vue3+vuecli4配置element-plus按需导入-自动导入

官网对vue3+vuecli4的「自动导入」说的不是很清楚,导致自己踩坑配置了很久,特此写下文章记录1、安装unplugin-vue-components命令:npm i unplugin-vue-components -D2、配置config(vuecli配置的是vue.config.js)就是这里 官网其实是没有说明清楚的 然后就点进了跳转到了github对应的位置 找到vue-cli的vue.config.js的配置,但是里面并没有说明如何实现element-plus的配置 只是写了op

2021-11-08 14:18:24 3117 6

原创 leetcode 46 全排列 JavaScript

leetcode 46 全排列 JavaScript思路:全排列的主要思想是回溯,递归过程使用的是dfs,只不过在dfs的过程中会涉及到对已使用的数进行标记,标记后递归,再把标记清除的一个过程代码如下:/** * @param {number[]} nums * @return {number[][]} */var permute = function(nums) { const res = []; const used = {}; function dfs(pa

2021-09-21 14:33:50 167

原创 JavaScript实现一个函数getType 获取所有的数据类型

利用Object.prototype.toString.call()方法,可以获取到[object ?],其中的?就是我们想要获取的数据类型。对于Object.prototype.toString.call(),前面有做过一次简单的分析:简单分析Object.prototype.toString.call(arr)判断数组类型之后思路就是截取到这个?这里用的是replace方法将前面’[object ‘替换成’’,之后把右边的’]‘替换成’’,再将首字母转换成小写。最后判断输入的内容是否属于object

2021-09-09 21:15:33 967

原创 leetcode 9 回文数 JavaScript

leetcode 9 回文数 JavaScript思路:如果小于0直接return false,否则将其化为字符串str,同时将该字符串反转得到rstr,对比str===rstr则返回true/** * @param {number} x * @return {boolean} */var isPalindrome = function(x) { if(x<0) return false; let rstr = x.toString().split('').revers

2021-09-08 10:23:50 93

原创 leetcode 409 最长回文串 JavaScript

leetcode 409 最长回文串 JavaScript思路:此题非寻找而是构造,那么回文串只需要对称即可,也就是偶数次的字母收录,字符串中间还可以再加一个数字,也可以不加。举个例子:abad 首先a出现两次,收录,之后在b和d找一个作为中间值即可,最终形成aba或者ada 长度为3另一个例子aa a出现两次,收录,遍历完成,因为是偶数个,所以也就没有中间值了。(如果是aab,那么b可以作为中间值拼成aba)。代码思路就是,用一个map对象,遍历过程中如果map里面没有该key值,存入到map

2021-09-08 10:00:13 159

原创 leetcode 870 优势洗牌 JavaScript

leetcode 870 优势洗牌 JavaScript思路:田忌赛马,意思就是,A拿最小的如果能打得过B最小的,ok同意;如果打不过,我当前A最小的这个要把B最大的抵掉,从而保证A若赚则赚,亏的时候换掉别人最猛的那只。代码思路大致相同,首先给A和B排序,之后给定i用于遍历完整个A,j和k分别指向B排序后的头和尾这里有个注意的点,因为后面需要得到对应的下标位置去放数字,所以B在排序前先给定下标,给完之后再对B排序比如1 10 4 11 对应下标0 1 2 3排序完之后我要的下标顺序是0 2 1

2021-09-06 15:20:52 117

原创 简单分析Object.prototype.toString.call(arr)判断数组类型

简单分析Object.prototype.toString.call(arr)判断数组类型JavaScript判断数组的方法有:①Array.isArray(arr)②arr instanceof Array③Object.prototype.toString.call(arr)④arr.constructor === Array 或arr. __ proto __.constructor===Array比较难理解的是③,为了能够理解其原理,我进行了逐步打印验证:let arr = [1,2

2021-08-29 19:26:14 1278

原创 leetcode 69 x的平方根 JavaScript

leetcode 69 x的平方根 JavaScript思路:利用二分查找的方法,不断缩小左指针和右指针,直到中间值mid取得平方根后结束(注意这里对于不能开方成整数的都舍去小数,所以mid在这种情况下是得不到对应的值的)举个例子 3 3的平方根是1点几。首先左指针l=0 右指针r=3 中间值取得为Math.floor((0+3)/2)=1 判断11=1<3,所以左指针左移到1的右边,也就是2;下一步中间值为Math.floor((2+3)/2) = 2 判断22=4>3,所以右指针移

2021-08-28 01:31:22 250

原创 leetcode 53 最大子序和 JavaScript

leetcode 53 最大子序和 JavaScript思路:动态规划,首先取nums第一个作为res,res就是我们最终返回的结果;初始化sum=0计算最大子序和之后for循环遍历,当sum>0的时候,将当前值累加到sum,否则sum等于当前值,每次for循环结束前都会对比res和sum取最大值作为res。这里比较难理解的是’否则sum等于当前值’,首先sum>0的时候一直累加是没问题的,因为大于0代表了累加的正收益,当累加之后发现sum往0收益和负收益方向了,说明后面这一段累加已经不

2021-08-25 12:06:33 67

原创 leetcode 14 最长公共前缀 JavaScript

leetcode 14 最长公共前缀 JavaScript思路:纵向扫描(个人觉得比较好理解的解法):首先取数组str中第一个字符串(strs[0]),从strs从第二个字符串开始循环(strs[1]开始),每次循环都用一个j来记录本次循环能够取到的最长字符串长度,之后只需要对最开始取出来的字符串进行一个截取0到j的长度就能够得到本次循环的公共前缀了。那么具体这个j应该怎么统计呢 举个例子:[flower,flow,flight] 取出flower作为参照。从第二个flow开始,本次循环是flowe

2021-08-25 00:23:32 94

原创 leetcode 112 路径总和 JavaScript

leetcode 112 路径总和 JavaScript思路:看到这种树状的,首先想到的是DFS,通过递归的方式,每次递归都把当前节点的val值减掉,也就是sumTarget-root.val,递归到最后一个节点,也就是叶子结点时,如果参数中的targetSum被减到0 说明这条路可行,返回true。如果左递归和右递归均返回false,则返回false(递归代码我感觉还是挺难理解的,思路一想就对,代码一写就跪,主要是要想办法让null的时候或者遍历,到末尾叶子结点的时候能够卡住,return相应的值

2021-08-23 22:24:42 152

原创 leetcode 剑指Offer 22 链表中倒数第k个节点

leetcode 剑指Offer 22 链表中倒数第k个节点思路:双指针法:设两个指针faster slower,因为题目要求返回第k个节点开始的链表,那么只需要在一开始,把faster往右移动k次,假如k=2,那么slower在0位置,faster在2位置,之后让两个指针同时往前走,直到faster走到尽头的时候,slower会比尽头相差2个位置,也就是我们要的倒数第二个节点,最后只需要返回slower就行了。(注意题目说的是最后一个节点算是倒数第一个节点,也就是末节点可以看成null,那么就需要让

2021-08-23 12:10:44 75

原创 leetcode 104 二叉树的最大深度 JavaScript

leetcode 104 二叉树的最大深度 JavaScript思路:

2021-08-23 00:09:55 62

原创 leetcode 70 爬楼梯 JavaScript

leetcode 70 爬楼梯 JavaScript思路:分两种,一种是数学思路,利用斐波那契数列公式直接算出具体不多介绍;第二种,找规律,可以发现1是1 2是2 3是3 4是5…仔细观察可以发现,当前的数等于前两个的数相加(1+2=3 2+3=5,也就是后面5是3+5=8…),得递推公式a[n]=a[n-1]+a[n-2],n>2代码如下:/** * @param {number} n * @return {number} */var climbStairs = function

2021-08-21 22:50:58 73

原创 leetcode 704 二分查找 JavaScript

leetcode 704 二分查找 JavaScript思路:设两个指针left right指向头和尾,以left<=right作为循环条件,取中间值mid,比较mid和target的大小,如果mid>target,说明right需要缩小,缩到mid-1的位置;如果mid<target,说明left要增大,增大到mid+1的位置。按照以上思路直到找到target 找不到则返回-1。这里注意mid最好写成left+((right-left)/2),left和right直接相加可能会因为

2021-08-21 00:38:42 99

原创 leetcode 1 两数之和 JavaScript

leetcode 1 两数之和 JavaScript思路:这里直接暴力两层遍历就能完成了,但是今天换一种思路。设一个map对象用来存放key和valuekey对应target-当前值,value对应当前下标。(这里直接把原本内层遍历的O(n)变为O(1)了)那为啥是target-当前值作为key呢,想一下我们现在需要的是两个值相加=target,当前遍历的时候,已知的值有两个,一个是target,一个是当前值,那么只需要再匹配一个值与当前值相加==target之后遍历就结束了,所以map中把ke

2021-08-19 23:24:36 56

原创 leetcode 165 比较版本号 JavaScript

leetcode 165 比较版本号 JavaScript思路:将version1、version2分别分割,放入数组中,接下来从左往右读取v1和v2的内容对比,一旦出现大于或者小于的情况,遍历提前结束,返回-1或1;否则,如果遍历完成后仍然没有出现更大的一方,返回0(不太理解为什么这道题是中等,可能是我想法太简单了)代码如下:/** * @param {string} version1 * @param {string} version2 * @return {number} */v

2021-08-17 14:14:15 172

原创 leetcode 415 字符串相加 JavaScript

leetcode 415 字符串相加 JavaScript这题用JavaScript做还真不太容易,很多需要注意的点代码如下:/** * @param {string} num1 * @param {string} num2 * @return {string} */var addStrings = function(num1, num2) { let i = num1.length-1; let j = num2.length-1; let cur = 0;

2021-08-17 10:25:54 121

原创 leetcode 912 排序树组 JavaScript

leetcode 912 排序树组-快速排序 JavaScript快速排序思路:首先定义left和right分别指向要遍历数组的头和尾,并设置基数pivot作为参照,把所有比pivot大的数放在pivot的右边,把所有比pivot小的数放pivot左边。假设基数均为当前遍历数组的最左边left的值(nums[left])①首先从right开始向左遍历,当找到比pivot小的数之后,将right的值放到left中,之后right暂停遍历,轮到left②左边从left+1开始遍历,当找到比pivot

2021-08-16 22:54:58 80

原创 leetcode 88 合并两个有序数组 JavaScript

leetcode 88 合并两个有序数组 JavaScript思路:方法一:最简单的方法就是把nums2加入nums1,同时把nums1的0去掉,最后sort()排序即可代码如下:/** * @param {number[]} nums1 * @param {number} m * @param {number[]} nums2 * @param {number} n * @return {void} Do not return anything, modify nums1 in-pl

2021-08-15 13:59:13 95

空空如也

空空如也

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

TA关注的人

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