09 2020 档案

摘要:题目链接 1525. 字符串的好分割数目 题目思路 使用两个数组,记录在第i个位置分割字符串的时候,其[0,i-1]之间出现字符串的种数和[i, s.length()-1]之间出现的字符串种数。然后再使用一次遍历去检查如果分割第i个位置,其左右的大小是否相等即可。 由于题目输入全部都是小写字符,所以 阅读全文
posted @ 2020-09-28 16:03 ZJPang 阅读(112) 评论(0) 推荐(0) 编辑
摘要:base 广州,一面问的问题还是非常基础的。 自我介绍 算法题 过半数 hashmap 数据结构 hashmap 是否线程安全 map怎么实现线程安全 concurrenthashmap 是怎么实现线程安全的? 分段锁和cas+synchronized在锁的粗细度有无区别? synchronized 阅读全文
posted @ 2020-09-28 15:59 ZJPang 阅读(1110) 评论(0) 推荐(0) 编辑
摘要:题目链接 117. 填充每个节点的下一个右侧节点指针 II 题目分析 这个题的普通版本其实比较好实现,利用层序遍历去保存当前层的所有节点然后再使用next指针重建链表即可。 但是有个进阶要求:使用常数级别的额外空间,这里就比较的难受了。 其实再看回题目,根节点这层的链表肯定只有一个节点,那么我们可以 阅读全文
posted @ 2020-09-28 09:34 ZJPang 阅读(111) 评论(0) 推荐(0) 编辑
摘要:题目链接 1529. 灯泡开关 IV 题目思路 这个题我的思路就是贪心,就嗯贪。 我们只需要用一个标志位来记录当前位置的灯泡开关情况,如果当前位置和目标位置不同的话,就反转一次,同时总记录+1. 那么我们这个反转就可以使用位运算,因为灯泡只存在0,1两种情况,我们翻转的时候只需要异或上1即可。 代码 阅读全文
posted @ 2020-09-21 19:24 ZJPang 阅读(109) 评论(0) 推荐(0) 编辑
摘要:题目链接 165. 比较版本号 题目思想 这个题没啥好说的,就是直接模拟即可,但是要注意Integer包装类的数值大小比较。另外就是字符串分割的时候,"."需要转义处理一下 代码实现 class Solution { //Integer不能直接比较大小,要么拆箱变成int,要么用equals来比较。 阅读全文
posted @ 2020-09-20 16:19 ZJPang 阅读(86) 评论(0) 推荐(0) 编辑
摘要:题目链接 312. 戳气球 题目分析 以两个数作为左右端点,找出最优解中它们中间那个戳破的气球,中间这个气球把整个队列分为了2部分,要想让中间这个气球和2个端点靠在一起,就需要先把分开的2部分的气球戳破。 dp[i][j]表示i~j最大值,i,j不戳破。 比如k气球在i,j之间时(i,k,j)被戳破 阅读全文
posted @ 2020-09-19 16:20 ZJPang 阅读(126) 评论(0) 推荐(0) 编辑
摘要:题目链接 605. 种花问题 题目分析 思路比较简单,直接写代码注释里了。 代码实现 class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { int res = 0; //假想在数组中左右边界添加0,便于处理 阅读全文
posted @ 2020-09-18 19:16 ZJPang 阅读(104) 评论(0) 推荐(0) 编辑
摘要:题目链接 47. 全排列 II 题目分析 很明显的回溯问题了,与1的不同在于这个2存在重复的数字。那么我们需要考虑可靠的去重方案。 我们可以先对数组进行预排序,那么我们在回溯过程中,如果选择当前的数字之后,当前轮次的下一个选择的数字就应该是与当前数字不同的那一个,这样可以确保我们不会选出重复的方案。 阅读全文
posted @ 2020-09-18 10:35 ZJPang 阅读(112) 评论(0) 推荐(0) 编辑
摘要:题目链接 990. 等式方程的可满足性 题目分析 这个题目其实非常典型的并查集的内容了,我们首先先对等号的式子建立一个并查集。然后再使用一轮循环去判断不等号的情况,如果不等号的左右两个符号属于同一个集合,那么就说明这个式子有问题,返回false即可。否则就返回true。 代码实现 class Sol 阅读全文
posted @ 2020-09-17 11:20 ZJPang 阅读(124) 评论(0) 推荐(0) 编辑
摘要:题目链接 85. 最大矩形 题目分析 这个题和最大正方形有点类似,但是这个是个矩形,所以需要特殊手段来求,但是总体来说dp的思路是没问题的。 我们开一个三维数组dp[i][j][k], i代表第i行,j代表列,k代表两个方向上1的个数。 dp[i][j][0] 就是matrix[i][j]水平方向累 阅读全文
posted @ 2020-09-14 20:26 ZJPang 阅读(105) 评论(0) 推荐(0) 编辑
摘要:题目链接 4. 寻找两个正序数组的中位数 题目分析 过了那么久,终于敢把这个题写一写了,其实在半年前看算法视频已经学过一次了,但是当时怎么都理解不了,现在自己又重新理解了一下。 题目给了两个正序数组,要求我们求其复合在一起的数组的中位数。 如果题目不限定条件的话,我们直接归并排序取中间即可,但是做不 阅读全文
posted @ 2020-09-14 11:12 ZJPang 阅读(127) 评论(0) 推荐(0) 编辑
摘要:题目链接 688. “马”在棋盘上的概率 题目分析 这个题其实就是一个dfs类型的题目,我们从开始点出发,一直向8个方向出发,如果遇到越界的情况就直接返回0。 直到K为0,即把K步走完了,那就返回1,那么我们当前这一步取一个ans累加下一步能够到达K == 0 的概率。 最后返回ans / 8即可。 阅读全文
posted @ 2020-09-12 21:18 ZJPang 阅读(139) 评论(0) 推荐(0) 编辑
摘要:题目链接 134. 加油站 题目分析 这个题初看没啥思路,但是细看的话可以用贪心来解决问题。 具体的思路写在代码中了 代码实现 class Solution { public int canCompleteCircuit(int[] gas, int[] cost) { int sum = 0; / 阅读全文
posted @ 2020-09-12 15:39 ZJPang 阅读(99) 评论(0) 推荐(0) 编辑
摘要:题目链接 454. 四数相加 II 题目分析 这个题最容易想的就是暴力法,O(n^4)的时间复杂度必定会T,所以不用想。 然后我们就可以利用缓存的思想,把A,B,C,D分成两个组,先对AB计算组合和,然后对CD计算组合和,检查AB中是否有其相反数,如果有的话就把AB中出现相反数次数加到res上。 代 阅读全文
posted @ 2020-09-05 12:20 ZJPang 阅读(87) 评论(0) 推荐(0) 编辑
摘要:题目链接 31. 下一个排列 题目分析 这个题我好像在算法课上听过,因此5个月前我用算法课上的想法实现了一次,但是时隔5个月,我却忘记了之前的思路,所以专门再写一篇记录文章。 这个题要求我们找比这个数大的最小元素,比如说1 4 2 3 1,那么比这个数更大的最小元素就是1 4 3 1 2 那么其实根 阅读全文
posted @ 2020-09-05 10:34 ZJPang 阅读(78) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示