leetcode算法题
文章平均质量分 81
倾城璧
JAVA是世界上最好的语言.java
展开
-
求职Leetcode题目(16)
解题思路1:egg 和 add 同构,就意味着下边的映射成立e -> ag -> d也就是将 egg 的 e 换成 a, g 换成 d, 就变成了 add同时倒过来也成立a -> ed -> g也就是将 add 的 a 换成 e, d 换成 g, 就变成了 eggfoo 和 bar 不同构,原因就是映射不唯一o -> ao -> r其中 o 映射到了两个字母思路2:将第一个出现的字母映射成 1,第二个出现的字母映射成 2对于 egge -> 1。原创 2024-11-14 13:10:30 · 474 阅读 · 0 评论 -
求职leetcode题目(15)
解题思路:下面我们一步一步地进行讲解。标签:动态规划动态规划方程:dp[n] = MAX( dp[n-1], dp[n-2] + num )由于不可以在相邻的房屋闯入,所以在当前位置 n 房屋可盗窃的最大值,要么就是 n-1 房屋可盗窃的最大值,要么就是 n-2 房屋可盗窃的最大值加上当前房屋的值,二者之间取最大值。原创 2024-11-11 11:29:47 · 767 阅读 · 0 评论 -
求职leetcode题目(14)
要实现一个 stack,那么我们还能用 java 自带的 stack 吗?这引导我们可以在模拟竖式计算(除法)过程中,使用「哈希表」记录某个余数最早在什么位置出现过,一旦出现相同余数,则将「出现位置」到「当前结尾」之间的字符串抠出来,即是「循环小数」部分。这道题最直接的解法就是我们可以用两个栈,一个栈去保存正常的入栈出栈的值,另一个栈去存最小值,也就是用栈顶保存当前所有元素的最小值。首先可以明确,两个数相除要么是「有限位小数」,要么是「无限循环小数」,而不可能是「无限不循环小数」。原创 2024-10-21 16:39:43 · 325 阅读 · 0 评论 -
求职Leetcode题目(11)
解题思路:这种方法思维就就比较简单,而且最后的效率也很不错!方法二:对于数组中存在的连续序列,为了统计每个连续序列的长度,我们希望直接,从起点开始遍历每个连续序列,从而获得长度。那么如何获取到每个连续序列的起点呢,或者说什么样的数才是一个连续序列的起点?答案是这个数的前一个数不存在于数组中,因为我们需要能够快速判断当前数num的前一个数num - 1是否存在于数组中。同时当我们定位到起点后,我们就要遍历这个连续序列,什么时候是终点呢?原创 2024-09-23 19:55:43 · 708 阅读 · 0 评论 -
求职Leetcode题目(9)
1、如果s[i]不为0,则可以单独解码s[i],由于求的是方案数,如果确定了第i个数字的翻译方式,那么解码前i个数字和解码前i - 1个数的方案数就是相同的,即f[i] = f[i - 1]。(s[]数组下标从1开始)2、将s[i]和s[i - 1]组合起来解码( 组合的数字范围在10 ~ 26之间 )。如果确定了第i个数和第i - 1个数的解码方式,那么解码前i个数字和解码前i - 2个数的方案数就是相同的,即f[i] = f[i - 2]。(s[]数组下标从1开始)最后将两种决策的方案数加起来,原创 2024-09-01 02:33:56 · 1014 阅读 · 0 评论 -
求职Leetcode题目(8)
第一种方法,直接暴力手撕算法:解法2:该算法是通过两数相乘时,乘数某位与被乘数某位相乘,与产生结果的位置的规律来完成。具体规律如下:乘数 num1 位数为 M,被乘数 num2 位数为 N, num1 x num2 结果 res 最大总位数为 M+Nnum1[i] x num2[j] 的结果为 tmp(位数为两位,"0x", "xy" 的形式),其第一位位于 res[i+j],第二位位于 res[i+j+1]。原创 2024-08-26 17:13:31 · 535 阅读 · 0 评论 -
求职Leetcode算法题(7)
这道题要求时间复杂度为o(log n),那么第一时间想到的就是二分法,二分法有个前提条件是在有序数组下,我们发现在这个数组中存在两部分是有序的,所以我们只需要对前半部分和后半部分分别进行二分查找得到目标值就OK了。可以发现的是,我们将数组从中间分开成左右两部分的时候,一定有一部分的数组是有序的。拿示例来看,我们从 6 这个位置分开以后数组变成了 [4, 5, 6] 和 [7, 0, 1, 2] 两个部分,其中左边 [4, 5, 6] 这个部分的数组是有序的,其他也是如此。原创 2024-08-15 17:15:33 · 864 阅读 · 0 评论 -
求职leetcode题目(6)
【代码】求职leetcode题目(6)原创 2024-08-07 13:38:43 · 432 阅读 · 0 评论 -
求职Leetcode题目(5)
我们可以想到,所有的不被包围的 O 都直接或间接与边界上的 O 相连。具体地,我们首先遍历该数组一次,如果某个元素为 0,那么就将该元素所在的行和列所对应标记数组的位置置为 true。那么我们首先要来考虑什么情况下, 'O' 不会被 'X' 包围。那就是这个'O'是在矩阵的边界上或者和矩阵边界上的'O'可达的。本题要求将所有被字母 X 包围的字母 O都变为字母 X ,但很难判断哪些 O 是被包围的,哪些 O 不是被包围的。这道题要将所有被 'X' 包围的 'O' 进行替换。原创 2024-08-07 00:17:53 · 696 阅读 · 0 评论 -
求职Leetcode题目(4)
可定义 boolean[][] dp ,dp[i][j] 代表 s1 前 i 个字符与 s2 前 j 个字符拼接成 s3 的 i+j 字符,也就是存在目标路径能够到达 i ,j;边界 2:if i=0 : dp[0]dp[j] = s2[0-j) equals s3[0,j) 遇到 false 后面可以直接省略。边界 3:if j=0 : dp[i]dp[0] = s1[0-i) equals s3[0,i) 遇到 false 后面可以直接省略。边界 1:dp[0][0] = true;原创 2024-08-02 16:32:25 · 660 阅读 · 0 评论 -
求职Leetcode题目(3)
整体的思路是遍历字符串,遍历过程中将每行都看成新的字符串构成字符串数组,最后再将该数组拼接起来即可如果 numRows=1 则说明当前字符串即为结果,直接返回否则整个字符串需要经历,向下向右,向下向右,这样的反复循环过程,设定 down 变量表示是否向下,loc 变量表示当前字符串数组的下标如果 down 为 true,则 loc+=1,字符串数组下标向后移动,将当前字符加入当前字符串中。原创 2024-07-31 11:13:53 · 1036 阅读 · 0 评论 -
求职Leetcode题目(2)
据说这是2024年字节二面的题目,我感觉这道题跟接雨水有点类似,最重要的思路还是要找到什么时候能形成矩形的这么个情况,某个范围的矩形的高度,是由最短的柱形来决定的。原创 2024-07-30 19:27:22 · 1360 阅读 · 0 评论 -
求职Leetcode有关动态规划的题目(1)
s[i]=‘)’ 且 s[i−1]=‘(’,也就是字符串形如 “……原创 2024-07-27 23:44:10 · 841 阅读 · 0 评论 -
LeetCode 中有关数组的题目(JAVA代码实现)
这道题的思路还是简单的,首先我们需要两个指针,一个end用于不断向后获取s字符串中的字符,并将其存入map中,当end将要存入下一个字符时,判断map中是否有相同的字符,如果存在,就将strat更新为此位置,然后ans是用来存入start和end的最大不重复子串的最大值,整个循环结束之后,返回ans就OK了。看看结果,直接超过了百分之百的人!原创 2024-07-22 09:10:36 · 918 阅读 · 2 评论
分享