
数学
加油开心
你好呀
展开
-
leetcode:丢失的数字
就是比如9,1,2等等,第一个数字9映射到9位置,改为-1,然后不断接力。最后遍历一遍找到不是-1那个位置就是我们要的。这个题我开始想的是比较高级的方法,映射。方法很多,以下注释写了很多。原创 2024-10-05 13:11:20 · 193 阅读 · 0 评论 -
leetcode:二叉树寻路
这个题要求某个数位于区间的最大值和最小值,从而求出他的对称值。这样的话我们很容易得到11位于16和8之间。然后求11的对陈数就是15-11+8=12。比如对于11这个数,他的二进制是1011。和二叉树关系说有有一点,说没有也没有。我们现在想取其二进制最高位1怎么办?这个题思路还是可以想到的。学到一个二进制新方法。原创 2024-09-26 15:39:45 · 249 阅读 · 0 评论 -
leetcode:连续的子数组和
不知道这个定理怎么用,这个题无法高效解决。但是要用到一个定理,同余定理。这题说他难吧,真不难。原创 2024-09-23 15:24:45 · 264 阅读 · 0 评论 -
leetcode:黑名单中的随机数
那1难道映射到4位置处?不行,所以要判断你映射处的位置是不是黑名单数。还有一个问题,如果本身黑名单数就在末尾,那自然不用映射。这样随机到了1,那么他的映射是4,则随机数是4。随机到了2,那不在黑名单不用查表,直接就是2。比如0,1,2,3,4,黑名单是1,3。比如还是上面5个数,黑名单是1,3,4。自然,3和4不用映射,本来就在数组末尾。建一个哈希表,只需要把1映射到4处。就是把黑名单数放到数组末尾。原创 2024-08-20 14:14:30 · 280 阅读 · 0 评论 -
leetcode:O(1)时间插入、删除和获取随机元素
这题需要哈希表配合数组一起来。牵扯到随机性那就得数组了。删除的话,交换到末尾删除。比如下图,你要删除元素7。先获取7元素的索引,为3。然后将末尾元素索引改为3。原创 2024-08-20 13:55:54 · 226 阅读 · 0 评论 -
leetcode:二维区域和检索 -矩阵不可变
先求出数组,然后根据数组来。原创 2024-08-12 17:45:28 · 143 阅读 · 0 评论 -
leetcode:快乐数
这个哈希表不会很大,因为最大数全是999999999,每一位平方和也不过1000左右。只要在计算过程中出现37或者73数字,那就不可能会有结果了。每计算出一个结果加到哈希表里,下一个结果在哈希表找到一样的。慢走一步,快走两步,二者相遇则false。如果没出现,那我们到底要算多少次呢?哈希表最大也才1000,这是极端情况。大量实践证明,差不多十多次就可以了。原创 2024-08-05 15:19:09 · 137 阅读 · 0 评论 -
leetcode:二进制表示中质数个计算置位
因为right最大是10的6次方,相当于2的20次方。然后依次判断该数组每一个数是不是素数,用哈希表判断。新建一个数组,存求出的每一位的二进制1的个数。第二种写法,感觉非常巧妙,但也很简单。官方的第一种写法和你一样的。提前存好了20以内的素数。原创 2024-08-05 13:46:59 · 209 阅读 · 0 评论 -
leetcode:计数质数
所以每当求得一个质数时,用标记法,在数组里把2x位置处标记为1。第一种,很经典,不过也优化了,不是那种纯暴力的。如果x是质数,那么2x,3x就一定不是质数。原创 2024-08-05 13:42:54 · 122 阅读 · 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 · 188 阅读 · 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 · 145 阅读 · 0 评论 -
leetcode:位1的个数
就用该数和该数减1相与,判断是否为0,即可。这道题有个很巧妙的方法。原创 2024-08-01 14:13:26 · 194 阅读 · 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 · 337 阅读 · 0 评论 -
leetcode:Pow(x,n)
当n取值为-2147483648,对其取相反数,已经越过了int最大值。我一开始写的306案例通过305,因为有溢出。所以改了之后要把int改为long就行了。这道题考察的是快速幂运算。原创 2024-07-31 14:00:28 · 224 阅读 · 0 评论 -
一些数学相关的知识(持续更新)
1、(a * b)%p =(a%p * b%p)%p原创 2024-07-31 13:25:18 · 137 阅读 · 0 评论 -
快速幂运算
res是结果,遇到的2的2次方时,此时p=0110,末尾是0,那就不执行if里面的。2的13次方按理说是2的8次方,2的4次方,2的2次方,2的0次方。但2的2次方我们不要,就让他存在x中,反正最后结果返回是res。我们只需选出2的32次方,然后2的32次方×2的32次方即可。那你怎么知道为啥没有2的2次方,因为1和4中间刚好缺个2次方。要计算2的32次方,我们只需计算2的16次方即可。13的二进制是1101,所以2的13次方等于。2的8次方×2的4次方×2的0次方。2的16次方×2的16次方。原创 2024-07-31 13:21:42 · 200 阅读 · 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 · 170 阅读 · 0 评论 -
leetcode:Excel表列名称
但实际上52➗26=2·······0,无法进行了。这题没必要用哈希表,有那个ASCII码转换。所以需要把52减去1,再按照上述即可。并不是严格按照余数和商来算的。比如52这个数按理说是AZ。这题感觉思路挺简单的。正确的,需要减去1的。原创 2024-07-30 13:56:30 · 178 阅读 · 0 评论 -
leetcode:买卖股票的最佳时机
这里只需靠考虑右边最大的再一相减即可。后来又想,不完全是接雨水题目。因为接雨水题要考虑左边和右边。这题另一种写法,思维一样的。这题思路我经历了几个阶段。后来想了下是接雨水问题。原创 2024-07-24 15:48:04 · 127 阅读 · 0 评论 -
leetcode:杨辉三角 II
generate就是杨辉三角I的代码。原创 2024-07-24 14:25:42 · 174 阅读 · 0 评论 -
leetcode:杨辉三角
【代码】leetcode:杨辉三角。原创 2024-07-24 13:37:09 · 225 阅读 · 0 评论 -
leetcode:同构字符串
一个元素映射一个,不能映射同一个,不能一个映射多个,全部都得有映射。如果s1某一位置处是连续相同字符,那s2该位置处也是连续相同字符。如果s1某一位置是单一字符,那s2该位置处也是单一字符。这个题当时没做出来,主要是没理解映射。foo和oof为啥不行。o也映射到这个0,不行。就是考你映射数学知识。原创 2024-07-19 13:46:54 · 154 阅读 · 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 · 231 阅读 · 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 · 176 阅读 · 0 评论