随笔分类 - 基础算法
摘要:离散化 什么是离散化? 一些数据范围比较大,但是数据的个数不多,将其数字映射成较小的下标 从本质上来看离散化可以看成哈希,是一种特殊的哈希,其保证数据在哈希以后仍然保持原来的顺序 离散化的步骤 排序 去重(排序好了才能去重,可以用stl中的unique去重然后用erase去除) 访问的时候可以通过二
阅读全文
摘要:双指针去重法 思路 代码板子 //返回一个无重序列的后一位的迭代器(便于删除,仅保留无重复序列) vector<int>::iterator unique(vector<int>& t) { int j = 0; for (int i = 0; i < t.size(); ++i) { if (!i
阅读全文
摘要:区间合并的朴素做法 时间复杂度O(n2) 第一层循环遍历遍历区间,然后第二层循环去查找区间看能否合并然后更新,时间复杂度太高了 区间合并的贪心做法 时间复杂度O(nlogn) 步骤: 左端点为关键字然后从小到大排序 当前区间和下一个区间的关系有三种: 核心板子代码 // 将所有存在交集的区间合并 i
阅读全文
摘要:位运算常见的两种操作 1. 求x的二进制表示中第k位是几x >> k & 1(从第0位开始,比如1100第0位是0,第一位是0,第二位是1,第三位是1) #####算法的时间复杂度:O(logn) #####算法详解: 1.先把第k位移到最后一位x >> k 2.再看个位是几(通过&1来判断) x
阅读全文