算法与数据结构
文章平均质量分 54
little_miya
这个作者很懒,什么都没留下…
展开
-
位运算在解leetcode题中的妙用
1. ^^按位异或(XOR)运算符:是双目运算符, 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。相同时为0。任何数和0异或,仍为本身:a⊕0 = a任何数和本身异或,为0:a⊕a = 0异或运算满足交换律和结合律:a⊕b⊕a = (a⊕a)⊕b = 0⊕b = b与本身异或结果为0这条性质,通常可以用于2. << >><< 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢原创 2022-01-04 17:13:23 · 2893 阅读 · 0 评论 -
二分查找的左闭右开和左闭右闭写法中各种小细节深究
写在前面lower_bound查找的是升序序列中的第一个出现target的pos,区间应从右向左收缩。upper_bound查找的是升序序列中的最后一个出现target的pos,区间应从左向右收缩。主循环判断本质目的是为了确保整个区间能够被检索到。1. 左闭右开每次循环的区间都是[left, right),在二分的时候,搜索区间去掉mid使得原始区间分为两块[left, mid), [mid+1, right),这样才能保证整个区间都被检索。所以left = mid + 1和right =原创 2021-02-10 16:42:56 · 4527 阅读 · 0 评论 -
滑动窗口的应用:76. 最小覆盖子串
题目leetcode第76题:给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。思路动图来源于leetcode官方首先使用两个长度为128的数组,分别记录t中是否存在对应字符,以及对应字符出现的频率。 vector<int> chars(128, 0); // t中是否存在该字符原创 2021-02-09 18:40:34 · 182 阅读 · 0 评论 -
快慢指针的应用:图文说清floyd判圈法并附代码
1. floyd判圈法一个快指针每次走两步,一个慢指针每次走一步,那么如果存在圈的话,两个指针必定会相遇。而且相遇的位置在圈内。原创 2021-02-09 11:46:42 · 295 阅读 · 0 评论