
leetcode
leetcode算法记录
zjun3021
AI追风者
展开
-
桶映射
我们将 int范围内的每一个整数 x 表示为 x = (t + 1) *a + b(0<=b <=t)的形式,这样 x即归属于编号为 a的桶,桶的大小为t+1,int getID(int x, long w) { return x < 0 ? (x + 1ll) / w - 1 : x / w;}如w=10, 因为非负数是09,1019…这种一组,而负数是-1~-10, -11-20…这些是一组,如果-1~-10直接除以10,会被分到两组中,而不是-1这一组,所以先+1变成-0–原创 2021-04-17 21:42:17 · 150 阅读 · 0 评论 -
防止大数相加或相减溢出
1、nums[r]与t相减,可能会溢出2、nums[r]与t相加,可能会溢出auto iter = rec.lower_bound(max(nums[r], INT_MIN + t) - t); if (iter != rec.end() && *iter <= min(nums[r], INT_MAX - t) + t) { return true; }...原创 2021-04-17 12:53:51 · 336 阅读 · 0 评论 -
二叉树的四种迭代遍历方式
1、先序遍历首先访问根节点,然后根据栈后进先出的特点,访问右节点,左节点。void iterativePreorder(Node *node){ if (node == nullptr) { return; } stack<BinaryTreeNode> stack; stack.push(node); while (!stack.empty()) { node = stack.top(); stack原创 2021-04-13 21:32:12 · 280 阅读 · 0 评论 -
滑动窗口
无重复最长字串class Solution {public: int lengthOfLongestSubstring(string s) { if(s.size() == 0) return 0; unordered_set<char> lookup; int maxStr = 0; int left = 0; for(int i = 0; i < s.size(); i++){原创 2021-04-13 20:24:55 · 88 阅读 · 0 评论 -
自定义priority_queue,equal_range比较函数
1、自定义priority_queue通过decltype来声明cmp类型 auto cmp = [](int left, int right) { return (left ^ 1) < (right ^ 1);}; std::priority_queue<int, std::vector<int>, decltype(cmp)> q3(cmp);2、自定义equal_rangestruct S{ int number; char name;原创 2021-04-08 14:37:09 · 264 阅读 · 0 评论 -
判断线段是否相交
根据数学知识我们可以知道,当 min(rec1[2], rec2[2]) > max(rec1[0], rec2[0]) 时,这两条线段有交集。对于矩形 rec1 和 rec2 的竖直边投影到 yy 轴上的线段,同理可以得到,当 min(rec1[3], rec2[3]) > max(rec1[1], rec2[1]) 时,这两条线段有交集。class Solution {public: bool isRectangleOverlap(vector<int>& r原创 2021-04-07 18:49:17 · 137 阅读 · 0 评论 -
Split字符串的方法
1、使用find函数void spit(const string &s, vector<string> &out, const string &delimiters =""){ auto pre_pos = s.find_first_not_of(delimeters, 0); auto pos = s.find_first_of(delimeters, pre_pos ); while(pre_pos != string::npos || pos != str原创 2021-03-30 10:57:39 · 159 阅读 · 0 评论