自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Leetcode 剑指 Offer 38. 字符串的排列

2.这道题的每一层都是需要从 0 开始搜索 而不是从 index 开始 , 这也是排序类型的特点。1.这道题需要对使用过的元素进行记录 (在排列类型中一个元素只能使用一次)排列类型的基础题,如果有不理解的可以动手画一下abc在程序中是怎么走的。

2023-01-12 13:19:36 238 1

原创 React 天坑 CSS设置滚动 height属性不生效问题

使用calc属性来规定height 属性不生效 ,页面也就没有办法滚动。发现居然是 calc() 里面的参数不能和 - 号相连接。查看了之前成功的代码。

2022-08-18 20:10:13 818

原创 React hooks useEffect 监听数组变化 不生效问题

useEffect 会检测两次监测的对象 内存地址是否相同,相同就跳过,不同才会执行useEffect。useEffect监听数据变化时,只有在数组元素类型为基本数据类型时可以起到作用。splice函数调用后 , items 变化但是useEffect 并未执行。上述数组直接赋值修改,导致setItems之后items引用未变。问题并不是出现在useEffect上。useEffect监听的可能是引用。...

2022-08-15 15:14:02 8893

原创 计算机网络 面试题

1.http 和 https 的区别1.端口HTTP的URL默认端口由"http://"起始且默认使用的端口为80HTTPS的URL默认端口由"https://"起始且默认使用的端口为4432.安全性与资源消耗HTTP协议是运行在TCP之上的 , 所有的传输内容都是明文,客户端和服务器端都无法验证对方的身份HTTPS 协议是运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上.所有的内容都是经过加密,加密采用对称加密,对称加密的密钥用服务器放的证书进行了非对称加密.所以 HT

2022-04-30 21:38:47 1575

原创 Leetcode 146.LRU缓存 记录反思

链接很难,官方提供了两种做法,做完思路还是不明确,所以记录一下深入反思1.LinkedHashMap2.hashmap + 双端队列这道题目的意思可能就是打算让我们封装一个双端队列出来所以主要记录一下第二种实现方法从题目要求可以看到 get 和 put 都需要 时间复杂度为 O(1) ,所以可以很简单的想到需要使用 map来实现,然后题干中还有一个要求, 如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。 逐出最长不使用的元素,先想着用队列,但是一般的队列还.

2022-04-20 21:46:32 138

原创 git 常见场景操作

一. git 拉取远程仓库代码1、前置条件已经注册了Github/ Gitee账号本地安装了git并生成了SSH密钥,将公钥配置在了远程。拉取一个开源项目 git clone [url] # url就是下面的这个网址二. git 远程链接gitee/hub1.Git的配置1.设置用户名和邮箱(–global 为全局参数,表明本地所有Git仓库都会使用这个配置)git config --global user.name "yourname"git config --global

2022-04-05 11:11:59 1078

原创 node-sass 安装失败问题 2022最新版

首先彻底删除原本nodejs1.从卸载程序卸载程序和功能。2.寻找这些文件夹并删除它们(及其内容)(如果还有)。根据您安装的版本,UAC设置和CPU架构,这些可能或可能不存在:C:\Program Files (x86)\NodejsC:\Program Files\NodejsC:\Users{User}\AppData\Roaming\npm(或%appdata%\npm)C:\Users{User}\AppData\Roaming\npm-cache(或%appdata%\npm-cach

2022-04-05 09:52:58 627

原创 Java 如何保证集合不可被修改 -- unmodifiableCollection()

Collection.unmodifiableCollection()Collections.unmodifiableCollection这个可以得到一个集合的镜像,它的返回结果不可直接被改变.Collections.unmodifiableCollection 实际是使用的代理模式,返回的Collection内部仍然使用原来Collection。 public static void main(String[] args) { ArrayList<String> s

2022-03-30 20:53:49 889

原创 Java HashMap 中 getOrDefault()方法的使用

Java中map.getOrDefault()方法的使用getOrDefault() 方法获取指定 key 对应对 value,如果找不到 key ,则返回第二个参数设置的值参数说明:key - 键defaultValue - 当指定的key并不存在映射关系中,则返回的该默认值返回值返回 key 相映射的的 value,如果给定的 key 在映射关系中找不到,则返回指定的值。实例以下实例演示了 getOrDefault() 方法的使用:import java.util.HashMap

2022-03-30 16:24:14 713

原创 Java面试题 集合七题 day.1

1.hashmap和hashtable的区别1.线程方面: HashMap时非线程安全的,HashTable是线程安全的;HashTable内部的方法基本都经过synchronized修饰.如果需要多线程的情况可以使用concurrentHashMap,在多线程情况下效率比HashTable更好2.效率方面 : HashTable基本上所有方法都加上了锁,所以效率非常差,HashTable基本被淘汰不使用3.null值 : 在HashMap中,null可以作为Key,而且可以有多个Value为null

2022-03-21 19:49:58 720

原创 Leetcode 98.验证二叉搜索树(中序遍历) 记录反思

众所周知,如果树是二叉搜索树,中序遍历出来的顺序就是递增顺序,顺着这个思路就很好写出代码先中序遍历把值存起来,然后判断值是不是单调递增的class Solution { List<Integer> list = new ArrayList<>(); public boolean isValidBST(TreeNode root) { inorder(root); for(int i = 1; i < list.size();.

2022-03-21 13:12:35 305

原创 Leetcode 653. 两数之和 IV - 输入 BST(前序遍历,set) 记录反思

如果你还记得Leetcode 第一题,那么这题主体思路就已经有了,定义一个set来判断k - node.val 是否存在于 set中,如果不存在就将当前node.val存到set中Leetcode 第一题是一个数组,依次遍历就好了,但是这个题是一个二叉树,所以需要用到树的遍历class Solution { Set<Integer> set = new HashSet<>(); public boolean findTarget(TreeNode root, i.

2022-03-21 11:04:34 338

原创 Leetcode 491.递增子序列(回溯) 记录反思

这题属于回溯题里面的树层去重的问题.前面的子集II它属于树枝去重和这题去重方法不一样.树层去重需要多加一个use数组来记录当前什么元素已经被使用过了,思想类似于 数组哈希表,创建一个数组,如果这个元素已经出现过了,那么就就当数组当前下标位置的元素置为1 ,之后的所有元素在递归前都要判断自己是否已经递归过了class Solution { private List<Integer> path = new ArrayList<>(); private List&l.

2022-03-20 13:53:23 146

原创 Leetcode 90. 子集 II(回溯) 记录反思

回溯的题目如果需要去重,首先肯定是要先排序,然后当前下标元素和前一个小标元素相等的话,就跳过当前循环建议拿[2,2,1]在自己脑子里面跑一下代码class Solution { List<List<Integer>> list = new ArrayList<>(); LinkedList<Integer> li = new LinkedList<>(); public List<List<Integer&.

2022-03-20 11:17:28 306

原创 Leetcode 131.分割回文串(回溯) 记录反思

回溯:首先 思考递归函数的入参然后 寻找递归函数的终止条件最后 找到单层循环逻辑一开始我想的先把所有字串找出来,然后扔到判断回文函数里面依次判断,然后查了之后发现 可以 在插入的时候就判断,会快非常多回溯,不理解就自己带入参数自己脑子运行一遍,就会清楚逻辑class Solution { List<List<String>> list = new ArrayList<>(); LinkedList<String> li =new .

2022-03-19 21:52:43 116

原创 Leetcode 78.子集(回溯) 记录反思

这可能是最适合入门的回溯问题需要遍历所有情况 ,所以不需要剪枝难得自己写出来一题回溯,真的算比较简单的,大家可以认真分析这题来入门回溯回溯真的不大好解释,最好的方法就是对着代码用自己脑子跑一遍,这样比题解都清楚class Solution { List<List<Integer>> list = new ArrayList<>(); LinkedList<Integer> li = new LinkedList<>();.

2022-03-19 21:44:29 937

原创 Leetcode 40.组合总和II(回溯) 记录反思

和 39.组合总和差不多,但是这题涉及到一个新问题,这题元素只能使用一次,如果出现两个或多个相同的元素,答案就会出现重复所以需要做去重操作去重可以在两个地方去重一个是在调用函数之前先把数组去重,还有一个是在处理数组的时候,遇到和前一个相同的情况就跳过当前循环,也能达到目的,其他的和第39题一毛一样我选用第二种class Solution { List<List<Integer>> list = new ArrayList<>(); Linke.

2022-03-18 21:44:23 225

原创 Leetcode 39. 组合总和(回溯) 记录反思

我觉得我终于稍微理解回溯了看了这个图看了好久,之前一直在想,每次回溯都拿原数组不会有重复结果吗,然后看图才明白从一个元素递归进入之后,这个元素的所有结果都会被选出,后面的就从别的元素开始了真的要好好对照的N叉树的遍历的思路好好想一下,真的很像回溯的代码还有有点不好写原始//击败 55%class Solution { List<List<Integer>> list = new ArrayList<>(); LinkedList<In.

2022-03-18 19:47:39 201

原创 Leetcode 77.组合(回溯) 记录反思

今天在做HOT一百的时候发现,之前回溯相关的问题还没有学习,就花了一点时间学习一下,如果不知道回溯的同学可以看一下这个视频,听完大概就懂这一类问题了这种题目特别像 589. N 叉树的前序遍历,但是比N叉树多一个回溯过程//未剪枝 18ms 击败 23%class Solution { List<List<Integer>> res = new ArrayList<>(); Deque<Integer> que = new Linke.

2022-03-17 20:49:52 348

原创 Leetcode 720.词典中最长的单词(set) 记录反思

思路:先将 words 数组按 String长度从小到大排序,如果长度相同的话就按照 ASCII 表排序 ,满足题目中优先返回字典序小的单词定义一个Set,在set 中 判断是否存在words[i].substring(0,words[i].length() -1),如果存在就说明 words[i]可以是其他单词加一得出的,最后返回最长的单词即可class Solution { public String longestWord(String[] words) { Array.

2022-03-17 11:28:26 105

原创 Leetcode 143.重排链表(链表) 记录反思

思路:取中点 + 反转后半段链表 + 合并前后链表在做这一题的时候发现 Leetcode 206.反转链表 我还不会,所以先找了一篇文章学习了一下如何反转链表(https://blog.csdn.net/qq_17550379/article/details/80647926)取中点快慢指针,快指针每次走两步,慢指针一部 ,当快指针走到尾部的时候,慢指针的位置就正好在中间 private ListNode midNode(ListNode node){ ListNode f..

2022-03-16 18:47:15 593

原创 Leetcode 剑指 Offer II 069. 山峰数组的顶部(二分) 记录反思

首先提示,题目的数组在坐标轴上的形状是个倒V ,不是 W思路:使用二分法,去mid与mid-1对应值进行比较.如果小于就说明mid对应值在递减坡度上,就移动right到mid-1的位置上.如果大于就说明mid对应值在递增坡度上,就移动left 到mid+1的位置上.循环往复注意一点:left不能从端点开始,会数组越界.如果数组是单调递增或者单调递减的话,返回结果是0,所以left和right都可以不用在端点开始class Solution { public int peakIndex.

2022-03-16 10:11:08 467

原创 Java 双端队列,队列,栈 --- Deque使用指南

前言前一段时间一直在Leetcode 刷题,看代码解析的时候发现大多数人用的都是Deque 来代替Stack,于是就产生了好奇.就学习了一下Deque的常用API.不学不知道一学吓一跳,原来Deque还有这么多功能.怕遗忘特此记录 Java官方推荐使用Deque替代Stack使用,Java堆栈Stack类已经过时. Deque堆栈操作方法:push()、pop()、peek()。一、Deque的是什么?Deq

2022-03-16 00:13:22 2536

原创 Leetcode 75.颜色分类 (双指针) 记录反思

一个神奇的题目,写起来哪哪都是问题,搞了好长时间,难道我的思路太简单了,而这题不是想的那么简单思路是双指针指向 头p0 尾p2, for i 遍历 每一个 下标对应值,如果等于 0 的话就交换p0和i下标的内容,如果等于2的话就交换p2和i下标内容出现的问题1.循环终止条件要写成 i <= p2 ,一开始for循环 i 终止条件 写的是 i < nums.length ,结果错了,最后的结果是002211,2在中间,发现如果i的下标大于p2的话,i指向的内容一定是2,这个时候p2指向的内.

2022-03-15 17:41:39 728

原创 Leetcode 64. 最小路径和(动态规划) 记录反思

和62.不同路径大同小异先定义推导数组 dp的含义,因为是求右下角的结果,所以dp数组的意义是dp[i][j]: 0,0位置到i,j位置的最小路径和数组的初始化:因为最上边和最左边的两条路是固定的,所以初始化这两边dp的推导公式dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1]) + nums[i][j],因为题目说了只能向右或者向下走,所以,只有两个方向可以到达i,j点.去这两个方向的最小值然后加上当前nums[i][j] ,就是当前点的最小路径和clas..

2022-03-15 14:41:56 871

原创 Leetcode 48. 旋转图像(翻转交换) 记录反思

先上下行进行翻转,然后对主对角线进行反转class Solution { public void rotate(int[][] matrix) { int n = matrix.length; for (int i = 0; i < n / 2; ++i) {//可以直接这样交换, ///就不用写俩个for循环了 int[] temp = matrix[i]; matrix[i.

2022-03-14 15:53:59 112

原创 Leetcode 599. 两个列表的最小索引总和(哈希表) 记录反思

题目有两个需要注意的点为什么返回值是数组?是因为什么时候不止一个呢[“a”,“B”,“C”][“C”,“B”,“a”]这个时候不止一个做法就是先将list1放入到map中,list[]做key,下标做value然后再定一个循环判断list2中的值是否在map中存在比当前下标和还要小的,存在就修改最小下标和然后清空存储string的list,如果下标和等于最小下标和就直接添加class Solution { public String[] findRestaurant(String.

2022-03-14 13:08:06 815

原创 Leetcode 33. 搜索旋转排序数组(二分) 记录反思

排序数组,目标值,logn,就差告诉我用二分了不知道在哪里旋转,所以需要判断每次定位的位置是在旋转到前面的那部分,还是在原本的前面那部分如何判断?每次二分找到的中间值,可以和left 和 right 左右指针所知位置比较,比如如果nums[mid] > nums[right] ,说明[left ,mid ]是旋转到前面的那部分,然后就可以对这部分进行判断目标值是否在其中class Solution { public int search(int[] nums, int target).

2022-03-14 00:24:48 206

原创 Leetcode 32. 最长有效括号(栈) 记录反思

做不出来,看答案看懂了class Solution { public int longestValidParentheses(String s) { int max = 0; Deque<Integer> que = new LinkedList<Integer>(); que.push(-1); for (int i = 0; i < s.length(); i++) { if.

2022-03-13 23:37:38 398

原创 Leetcode 5.最长回文子串(中心扩散) 记录反思

做回文题目最快的方法是马拉车算法,但是面试不考,那就写简单一点的算法吧中心扩散法,应该是第一时间想到的算法依次遍历每个点然后对当前点 向两边扩散找到回文class Solution { public String longestPalindrome(String s) { if(s == null) return ""; int left = 0; int right = 0; int slen = s..

2022-03-13 20:45:44 458

原创 Leetcode 11. 盛最多水的容器(双指针) 记录反思

Leetcode 热题一百做这个题目首先要确定双指针如何移动才能找到最大值去掉重复情况头尾指针最优情况是头尾对应高度最高,最后得到的面积肯定是最大,所以先从头尾开始,比较左右高度,小的向大的方向靠近就有可能找到比当前还要大的高度,直到遍历一遍数组结束所以时间复杂度是O(n)class Solution { public int maxArea(int[] height) { int left = 0; int right = height.length -..

2022-03-13 16:19:53 1237

原创 Leetcode 213.打家劫舍II(动规) 记录反思

这题和198.打家劫舍唯一的不同就是.数组成环了,所以需要分情况讨论情况一:最大值出现在 0 ~ nums.length-2 的位置上情况二:最大值出现在 1 ~ nums.length-1 的位置上这样就将首位相连的情况分割开了class Solution { public int rob(int[] nums) { int len = nums.length; if(len == 1) return nums[0]; .

2022-03-13 08:59:47 87

原创 Leetcode 198. 打家劫舍(动规) 记录反思

动规的入门题把dp写成nums,一不小心就提交了6次才过class Solution { public int rob(int[] nums) { if(nums.length == 1) return nums[0]; if(nums.length == 2) return Math.max(nums[0],nums[1]); int [] dp = new int [nums.length];.

2022-03-11 21:40:25 195

原创 Leetcode 121.买卖股票的最佳时机(贪心) 记录反思

实时更新最大值和最小值,然后返回最大值就好了class Solution { public int maxProfit(int[] prices) { int len = prices.length; int min = prices[0]; int max = Integer.MIN_VALUE; for(int i = 0; i < len ; i++){ i.

2022-03-11 21:11:06 123

原创 Leetcode 96. 不同的二叉搜索树(动规) 记录反思

递归难题第一步:还是老样子先写出递推数组的含义dp[i] :是整数i 个节点组成的节点的二叉搜索树种数第二步:找到dp数组的递推公式先画个图看看我思考了很久,一开始我想的是新的节点要插在哪里,然后发现这个思路错了所以 dp[3] = dp[0] * dp[2] + dp[1]*dp[1] + dp[2]*dp[0],所以对于某一个节点dp[i]都可以看作是其左右节点是dp[i-j] * dp[j -1]的循环相加class Solution { public int num.

2022-03-11 21:03:02 878

原创 Leetcode 343. 整数拆分(动规) 记录反思

做的第一道中等递归,还是有一点难度的第一步:递归首先要确定递归数组的功能dp[i] : 数字i的最大整数拆分值第二步:写出递推表达式,我一般习惯写出几个值然后找推导关系这个题目的dp[0] 和 dp[1] 理论上是没有意义的,所以从dp[2] 开始dp[2] = 1 => 1x1dp[3] = 2 => 1x2dp[4] 可以是 dp[3]* 1 或者 dp[2] * 2 或者是 2+2 中的最大值dp[3] *1 就相当于 1+2+1 dp[2]*2 就相当于.

2022-03-11 20:18:24 520

原创 Leetcode 63.不同路径II(动规) 记录反思

leetcode 62 题变种,可以先去看一下我写的62题解析这题和62题十分相似,首先我们要明白这个路径上如果出现了一个障碍意味着什么,说明这条路直接走不通不用记在总数里.如果这条路出现在上边界或者左边界的话,那么障碍之后的路永远也无法在走到了所以在数组初始化的时候要做一个判断,如果路径上出现了障碍物,这条路直接退出其他的和62题一摸一样class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) .

2022-03-10 23:47:14 107

原创 Leetcode 62.不同路径(动规) 记录反思

谢邀,机器人很可爱,题目很有意思,下次还来做动态规划最最核心的一点就是,如何写出递推公式,递推公式就是如何通过这个公式可以推导出全部的值动规首先需要有一个数组来存储推导状态下的中间值,对于这一题.dp[i][j]表示从(0,0)出发到(i,j)的路径数其次要先对数组进行初始化,因为所有的值都是从初始化的值一步一步推导出来的.对于这一题的初始化,我们要先找到直接可以确定的值,可以发现这两条边每一个位置是确定的只有一条路可以走到这里(不可以往上有往下啊),所以对这两条边全部初始化成 1然后就可以.

2022-03-10 20:29:27 107

原创 Leetcode 509.斐波拉契数(动规 迭代和递归) 记录反思

也是动态规划的经典题目,利用前面几个值可以推出后面的值依次反复,这就是动规,虽然这个很简单非常适合初学者入门动规可以递归也可以迭代//递归,真的很慢class Solution { public int fib(int n) { if(n == 0) return 0; if(n == 1) return 1; if(n == 2) return 1; r.

2022-03-10 19:41:20 7250

原创 Leetcode 70.爬楼梯(动规 数组) 记录反思

经典动态规划题目,利用前两个值求出第三个值class Solution { public int climbStairs(int n) { int[] dp = new int[n + 1]; if(n == 1) return 1; if(n== 2) return 2; dp[0] = 1; dp[1] = 1; dp[2] = 2; .

2022-03-10 19:38:15 172

空空如也

空空如也

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

TA关注的人

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