
二进制
小胡同的诗
千里之行,始于足下
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode137 只出现一次的数字 II(状态自动机+数字逻辑代数)
题目链接:leetcode137 题目大意 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。 示例 1: 输入: [2,2,3,2] 输出: 3 示例 2: 输入: [0,1,0,1,0,1,99] 输出: 99 解题思路 朴素算法 我们可以利用一个 HashSet 统计每个数字出现的次数,于是就可以在时间复杂度与空间复杂度均为O(n)O(n)O(n)下找到答案 状态自动机 根据这串数字的特点我们可以发现,对于序列中任意一种数字,不是出现1次原创 2020-08-18 01:13:22 · 215 阅读 · 0 评论 -
数组中只出现一次的数字(异或)
链接:数组中只出现一次的数字 题目详情: 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 分析: X对应1的位两个数一定相反,于是找一个1的数将该异或值拆为两组:0、1, 显然该位对应为1的异或到一块一定是其中一个出现1次的数, 因为如果出现两次,那么两个会同时异或到一块,相当于0, 这样做是根据异或具有的交换律和结合律得到的。 这道题是数组中只出...原创 2019-07-28 10:32:29 · 267 阅读 · 2 评论 -
RMQ问题(ST表)
算法描述 ST表是根据倍增的思想设计的基于动态规划的做法,优点是能O(1)O(1)O(1)地查询,缺点是不能像线段树那样支持修改。 关于预处理: 枚举2的k次幂的区间长度,然后枚举起点将区间一分为2去求最大值 关于查询: 让两个子区间头和尾重叠分别接在待查区间的头和尾,然后尽可能的让区间长度j在n内大,做法是log2nlog2^nlog2n向下取整,显然最极限情况是两个子区间头尾相接没有重叠,其...原创 2019-08-19 16:10:49 · 212 阅读 · 0 评论 -
LeetCode338. 比特位计数(二进制+动态规划)
题目链接:Leetcode338 思路: 利用x&x-1很容易从前一个少1的数递推过来,复杂度O(n∗c)O(n*c)O(n∗c) class Solution { public: vector<int> countBits(int num) { //利用x&x-1快速计算比该数位小1的数然后递推 vector<int...原创 2019-09-10 00:02:11 · 189 阅读 · 0 评论