leetcode
加油开心
你好呀
展开
-
leetcode:二进制表示中质数个计算置位
因为right最大是10的6次方,相当于2的20次方。然后依次判断该数组每一个数是不是素数,用哈希表判断。新建一个数组,存求出的每一位的二进制1的个数。第二种写法,感觉非常巧妙,但也很简单。官方的第一种写法和你一样的。提前存好了20以内的素数。原创 2024-08-05 13:46:59 · 180 阅读 · 0 评论 -
leetcode:计数质数
所以每当求得一个质数时,用标记法,在数组里把2x位置处标记为1。第一种,很经典,不过也优化了,不是那种纯暴力的。如果x是质数,那么2x,3x就一定不是质数。原创 2024-08-05 13:42:54 · 101 阅读 · 0 评论 -
leetcode:交替位二进制数
比如5这个数,二进制是101,问题是他是32位的啊。这题思路什么的纸上画一画是可以想出来的。前面都是0,肯定不可能是true的。还有暴力方法,就是逐位判断即可。这题我感觉出的有问题。原创 2024-08-05 12:45:59 · 186 阅读 · 0 评论 -
leetcode:汉明距离
当然这题还可以用java给的api做,Integer.bitcount。再套用之前写的求整数二进制1的个数代码。你也可以用暴力点的,一位位判断,都可以。异或是相同为0,不同为1。原创 2024-08-05 11:31:13 · 169 阅读 · 0 评论 -
leetcode:二进制手表
两个for循环,外面层表示上面数字,内部for循环表示下面数字。bitcount是新学的api,统计数字里二进制1的个数。这题啊,你看数字都有规律,8,4,2,1不就是二进制吗。如果8亮了,2亮了,表示数字10,不就是1010吗。源代码流失了,就过程很繁琐。我用的是回溯,感觉很难做。这题当时废了我好长时间。想到这里应该就可以了。原创 2024-08-04 18:48:58 · 112 阅读 · 0 评论 -
leetcode:比特位计数
下面这种方法是最好理解的,不断与自己减1,判断是否为0从而统计1的个数。如果i是偶数,那么i中1的个数和i/2中1的个数相等的。如果i是奇数,那么i的1的个数比i/2中1的个数多1。因为i&(i-1)是将i的最右边1去掉。也就是说i比i&(i-1)多一个1。这题就是剑指offer上的原题。这个的时间复杂度就大大降低了。for循环里只有一句。原创 2024-08-01 15:19:42 · 156 阅读 · 0 评论 -
leetcode:2的幂
一个数 n 是 2 的幂,当且仅当 n 是正整数,并且 n 的二进制表示中仅包含 1 个 1。所以我们把这就有一个1删除,剩下判断是不是0,如果是0,表示是2的幂。n=01100010 减去1=01100001。与运算0110 0000,确实删去了最后一个1。n & (n - 1),这是把最后一个1删去。为啥能删去最后一个1?原创 2024-08-01 14:44:51 · 126 阅读 · 0 评论 -
leetcode:位1的个数
就用该数和该数减1相与,判断是否为0,即可。这道题有个很巧妙的方法。原创 2024-08-01 14:13:26 · 173 阅读 · 0 评论 -
leetcode:颠倒二进制位
输入是个int型,只是内存存的是01码,并不是输入的是0101010这样类似的。这个题是无符号,所以最高位依然存的是数值不是符号。代码lo是0,hi是length-1。比如abcd,先对ab逆序,为ba。你可以对局部逆序,然后拼起来即可。我这里给个字符串逆序的分治法例子。这题你也可以用分治法做。要想对一个字符串逆序。然后对cd逆序为dc。比如对这个字符串逆序。原创 2024-08-01 13:47:33 · 102 阅读 · 0 评论 -
leetcode:超级次方
就是类似于int[]数组转int,每求出一个结果都要返回原来在乘以10,为了百位个位千位。到了百分位,整体结果继续10次方,这样原来十分位到了百分位,个位到了十位。变成了计算比如2的[1,2,3]次方,即2的123次方。然后到了十分位,之前的自然要整体10次方,还要加上个位。再加上个位即可,跟着思维思维一样的,可能表述有点问题。这个b是越界的,不管你用long还是啥,越界的。这两道给的指数都没越界,但这个给的指数就越界了。比如2的103次方,即【1,0,3】看不懂的话,去掉mod。这题要用到秦九韶算法。原创 2024-07-31 17:01:11 · 307 阅读 · 0 评论 -
leetcode:Pow(x,n)
当n取值为-2147483648,对其取相反数,已经越过了int最大值。我一开始写的306案例通过305,因为有溢出。所以改了之后要把int改为long就行了。这道题考察的是快速幂运算。原创 2024-07-31 14:00:28 · 194 阅读 · 0 评论 -
leetcode:双模幂运算
res是结果,遇到的2的2次方时候,此时p=0110,那就不执行if里面的。2的13次方按理说是2的8次方,2的4次方,2的2次方,2的0次方。但2的2次方我们不要,就让他存在x中,反正最后结果返回是res。那你怎么知道为啥没有2的2次方,因为1和4中间刚好缺个2次方。因为根据二进制看出来,2次方那一位是0,所以没有。13的二进制是1101,所以2的13次方等于。先讲快速幂,要计算2的13次方咋计算?2的8次方×2的4次方×2的0次方。我感觉上述还更好理解些。这道题当时给我整蒙了。他牵扯两个数学知识点。原创 2024-07-31 13:17:58 · 135 阅读 · 0 评论 -
leetcode:Excel表列名称
但实际上52➗26=2·······0,无法进行了。这题没必要用哈希表,有那个ASCII码转换。所以需要把52减去1,再按照上述即可。并不是严格按照余数和商来算的。比如52这个数按理说是AZ。这题感觉思路挺简单的。正确的,需要减去1的。原创 2024-07-30 13:56:30 · 132 阅读 · 0 评论 -
leetcode:Excel表列序号
只是你没意识到你写的就是进制转换代码。新建一个哈希表,存26字母及其值。官方给的答案是26进制转10进制。然后字符串逐一取出值计算即可。和你的思路其实一样的。原创 2024-07-30 12:55:54 · 94 阅读 · 0 评论 -
leetcode:多数元素
分治就是如果数 a 是数组 nums 的众数,如果我们将 nums 分成两部分,那么 a 必定是至少一部分的众数,所以类似于归并排序,我们不断二分,选出每一个区间的众数,区间合在一起再次求众数,类似于归并排序。随机法就是随机选一个下标,看他是不是众数,如何判断是不是众数,该数出现次数大于n/2。排序法就是排序,然后取中间值即可。哈希表思路很简单,就是统计次数。哈希表,排序法,随机法,分治。原创 2024-07-30 12:25:01 · 130 阅读 · 0 评论 -
leetcode:比较含退格的字符串
比如skip不等于0,说明当前字符需要去掉,skip-1,直到skip为0。比如123#5和123#7,倒数第一个分别是5和7,直接返回false。首先是#和#,那么二者skip都是1,到了6和6,skip都减去1为0。到了1和2,此时skip为0,不相等,return false。变量skip用于记录#次数,比如skip=0,表示还没遇到#等到skip为0后,比较两个字符串对应的字符是否相同。我这里用的是变长数组,最近刚学的一种数据结构。然后到3和3,相等,继续。到了2和2相等,继续。原创 2024-07-29 15:01:18 · 147 阅读 · 0 评论 -
leetcode:文件夹操作日志搜集器
就两种特殊情况,剩下管你是d1还是d100,计数变量直接加1即可。这题大致一想,好像还要深入字符串。把一些比较繁琐的可以化为一类。原创 2024-07-29 13:06:47 · 171 阅读 · 0 评论 -
leetcode:棒球比赛
如果是负数的话取第一个就是"-",按理说属于第一种情况,但进不去。我的这段代码只需要把第一个if当到最后,即可。default就是处理整数,不管负数还是正数。这题官方没用栈,用的是变长数组。频繁字符整数字符串之间转换。每一次循环结束计算数组长度。刚开始写的时候没考虑负数。原创 2024-07-29 12:43:38 · 261 阅读 · 0 评论 -
leetcode:只出现一次的数字
最后剩下的就是要的结果。数组里的数字互相异或。原创 2024-07-25 16:42:52 · 199 阅读 · 0 评论 -
leetcode:验证回文串 Ⅳ
【代码】leetcode:验证回文串 Ⅳ。原创 2024-07-25 14:37:53 · 215 阅读 · 0 评论 -
leetcode:验证回文串 III
我测试了下,k不能给的太大,3就可以,14也可以,50都不行。给的字符串长度是300多长,k等于216,超时了。用验证回文串II中我写的动态规划代码即可。这道题看来贪心算法不行了,还得动态规划。只不过要加一个变量统计修改了多少次。和验证回文串II代码差不多。上一题是k=1,没有超时。51个案例通过了44个。原创 2024-07-25 13:44:30 · 105 阅读 · 0 评论 -
leetcode:验证回文串 II
因为给的字符串太大了,10000长,这样的话二维数组就有10000*10000长了。时间复杂度是n,看起来是n平方,仔细一想不是。在labuladongP397页。这个是用动态规划做的。你还得画个二维数组图。但是呢超出内存限制了。原创 2024-07-25 12:48:39 · 144 阅读 · 0 评论 -
leetcode:验证回文串
存到另一个字符串中,然后逆序比较是否相等。将字符串逐一遍历,判断是不是字母或数字。先把字符串所有非数字字母去除。这个题有很多可用的api。这里我用的是正则表达式。原创 2024-07-25 10:16:37 · 171 阅读 · 0 评论 -
leetcode:买卖股票的最佳时机
这里只需靠考虑右边最大的再一相减即可。后来又想,不完全是接雨水题目。因为接雨水题要考虑左边和右边。这题另一种写法,思维一样的。这题思路我经历了几个阶段。后来想了下是接雨水问题。原创 2024-07-24 15:48:04 · 92 阅读 · 0 评论 -
leetcode:杨辉三角 II
generate就是杨辉三角I的代码。原创 2024-07-24 14:25:42 · 149 阅读 · 0 评论 -
leetcode:杨辉三角
【代码】leetcode:杨辉三角。原创 2024-07-24 13:37:09 · 195 阅读 · 0 评论 -
leetcode:重新放置石块(每日一题)
哈希表并不是按照你插入的顺序排的。而是自己的算法排的,不是有序的。就是写的过程中,误解了。原创 2024-07-24 11:39:03 · 105 阅读 · 0 评论 -
leetcode:路径总和
就拿上图来说targetSum = 20,那么5,4,11就不行,因为11不是叶子节点。你如果放在开头,就算等于targetSum,那也不一定是叶子节点。还有就是if判断是否等于targetSum要注意位置,放在哪?人家说的是根节点到叶子节点,什么是叶子节点?就是其左右都没有节点了,不能是中间的。因为题目说的很明白,是叶子节点。有了第一次,就会有第二次。这道题有很多细节要注意。原创 2024-07-23 15:22:49 · 108 阅读 · 0 评论 -
leetcode:平衡二叉树
就表面想一下,比如这题需要两个变量记录左右子树长度。建议全局变量记录,或者像我下面一样,加几个if。如果在递归过程中碰到正确答案了,你要返回。不要想复杂,不要往深处想。对于每一个节点都是一样的。原创 2024-07-23 13:29:13 · 115 阅读 · 0 评论 -
leetcode:将有序数组转换为二叉搜索树
这个题我一开始想的就是二分法。就是对剩下的二分,然后拼起来。不断二分,但还是没做出来。原创 2024-07-23 12:54:26 · 162 阅读 · 0 评论 -
leetcode:把二叉搜索树转换为累加树
当初首先想到从右开始遍历。原创 2024-07-22 13:37:41 · 103 阅读 · 0 评论 -
leetcode:二叉搜索树中第k小的元素
和上面区别是,上边是全部遍历完了,再取第k个。通过迭代法,按照中序遍历将节点存到列表中。遍历过程中,用一个变量计数,是否等于k。然后取列表中第k-1个元素即可。这个是边遍历边判断。原创 2024-07-22 13:12:35 · 146 阅读 · 1 评论 -
leetcode:对称二叉树
给dfs函数传的是根节点左右两个子树,直接判断两个子树相不相同即可。这个题和leetcode100题一样的。代码直接复制过来即可。原创 2024-07-22 11:44:10 · 133 阅读 · 0 评论 -
leetcode:同构字符串
一个元素映射一个,不能映射同一个,不能一个映射多个,全部都得有映射。如果s1某一位置处是连续相同字符,那s2该位置处也是连续相同字符。如果s1某一位置是单一字符,那s2该位置处也是单一字符。这个题当时没做出来,主要是没理解映射。foo和oof为啥不行。o也映射到这个0,不行。就是考你映射数学知识。原创 2024-07-19 13:46:54 · 123 阅读 · 0 评论 -
leetcode:相同的树
所以,不能通过前序遍历将其结果存到数组里,再逐一比较。一个二叉树通过前序遍历得到的数组。就是新建两个队列,逐一比较即可。原创 2024-07-18 15:10:45 · 113 阅读 · 0 评论 -
leetcode:爬楼梯
动态规划,第一步base case,状态转移方程,自顶向下。下面这段代码超时了,当n=45时,超时。原创 2024-07-17 16:17:47 · 146 阅读 · 0 评论 -
leetcode:x的平方根
2的平法也比8小,max更新,max=2。有些数字开根号为小数,没有整数,咋办?在if(num < x)里取最大值。比如1的平法比8小,max=1。那范围就是1000-9999。然后确定范围,比如x为8位。注意越界,最好用long。我的思路是先求出x的位数。原创 2024-07-17 14:37:45 · 197 阅读 · 0 评论 -
leetcode:二进制求和
短的那一位直接变0即可,因为0不影响相加结果。官方题解就是把二进制数转化为十进制数,相加。比如110+1,可以看成110+001。在把和重新转换为二进制数。如果一个短一个长咋办?原创 2024-07-17 13:29:20 · 115 阅读 · 0 评论 -
leetcode:加一
如果 digits 的末尾有若干个 9,例如 [1,2,3,9,9],那么我们只需要找出从末尾开始的第一个不为 9 的元素,即 3,将该元素加一,得到 [1,2,4,9,9]。随后将末尾的 9 全部置零,得到 [1,2,4,0,0] 并返回。如果 digits 的所有元素都是 9,例如 [9,9,9,9,9],那么答案为 [1,0,0,0,0,0]。如果 digits 的末尾没有 9,例如 [1,2,3],那么我们直接将末尾的数加一,得到 [1,2,4] 并返回;看了一个人写的,这种方法很巧妙。原创 2024-07-16 17:00:52 · 143 阅读 · 0 评论 -
leetcode:最后一个单词的长度
从后往前遍历,找到字符串中的最后一个字母,该字母即为最后一个单词的最后一个字母。从最后一个字母开始继续反向遍历字符串,直到遇到空格或者到达字符串的起始位置。\s意思就是匹配任何空白字符,包括不限于空格、制表符、换页符。这个题我使用正则表达式做。原创 2024-07-16 16:00:44 · 205 阅读 · 0 评论