< m; i++) {//如果新加入的字符不能匹配 , j一直回退while(j != -1 && needle[i] != needle[j + 1]) j = ne[j];//如果新加入的字符能够匹配 , 最长字串长度增加 , 继续匹配if(needle[i] == needle[j + 1]) j++;ne[i] = j;}//KMP处理,和上面处理思想一致for(int i = 0, j = -1; i < n; i++) {while(j != -1 && haystack[i] != needle[j + 1]) j = ne[j];if(haystack[i] == needle[j + 1]) j++;if(j == m - 1) {return i - j;}}return -1;}};
29. 两数相除
思想
我们以147 / 3 = 49为例 , 49的二进制表示 =
由此我们可以借助二进制表示 , 提前存储好所有2^k * 的情况 , 题目条件限制比较多 , 只能使用int类型 , 并且考虑到正数范围比负数小 , 所以我们在处理的时候统一使用负数来处理 。在处理过程中需要及时考虑边界条件溢出的情况 。
class Solution {public:int divide(int x, int y) {bool flag = (x > 0) ^ (y > 0);if (x > 0) x = -x;if (y > 0) y = -y;vector> tmpadd;for(int i = y, j = -1; i >= x; i += i, j += j) {tmpadd.emplace_back(i, j);if(i < (INT_MIN >> 1)) break;}int res = 0;for(int i = tmpadd.size() - 1; i >= 0; i--) {if(tmpadd[i].first >= x) {res += tmpadd[i].second;x -= tmpadd[i].first;}}if(!flag) {if(res == INT_MIN) return INT_MAX;res = -res;}return res;}};
?这个专栏将会持续更新题解和思路分享 , 欢迎留言交流!
- leetcode:2021.12.19周赛 变成递增数列的最少操作次数
- 200道大数据面试常考Leetcode算法题
- 绝对领域、究极力量,这部游戏改编的漫画当年火遍大街小巷 世界之最漫画
- 为什么都要柑果球,究极日月里柑果球还是只能获得一个吗
- 究极日月究极之洞神兽 究极日月究极之洞
- 口袋妖怪究极绿宝石臭臭花怎么进化?
- 火影忍者究极忍者风暴3完全爆发 火影忍者:究极忍者风暴3完全爆发
- 究极绿宝石5谁可以学潮旋
- 火影忍者究极风暴4电脑能双人吗 火影忍者究极风暴4电脑可以双人对战吗
- 究极绿宝石坚果哑铃多少级进化