LeetCode | Bit Manipulation, heap | 190. 191. 136. 137. 201.215.

190. Reverse Bits

191. Number of 1 Bits

一个一个数就行了。比较简单。

136. Single Number 

XOR的点在于,两个一样的数字a^a,结果是0. 且XOR是可以换位置的,所以把所有东西XOR在一起,剩下的就是单呗的。

137. Single Number II

四种方法:https://www.youtube.com/watch?v=cOFAmaMBVps

time complexityspace complexityimplementation
Hashmap

O(N):unorder_map,

O(NlogN):

map

O(N)把所有元素traverse一遍,存在map里,然后traverse map找到次数为1的
sortO(NlogN)但是N<=2^32,所以logN小于32,所以sorting的方法比bit intuitive好见下sort后从第二个元素开始,i每次加三,如果每次这个元素都和这个元素之前的一个一样那么就在cluster里,不一样那么之前那个元素就是single的。如果single在最开始或最后面,那么可以直接通过和前一个比找出来
bit intuitiveO(32*N)O(1)每个bit都求个和,sum%3,把这些sum再加起来
bit non-intuitiveO(N)O(1)很蹊跷,麻烦,懒得学

 

*sort tends to be implemented as some variation of quick-sort, so that tends to be recursively implemented, so it would probably use O(log(n)) calls on average.

201. Bitwise AND of Numbers Range

很重要的观察:在一段区间内,前n个数字会是一样的,后m个数字会不一样,而这m个数字里一定有0,which means &出来都是0.

215. Kth Largest Element in an Array

max heap with greatest number on top: priority_queue<int> pq;

min heap: priority_queue <int, vector<int>, greater<int>> gq;

如果是minheap,那么一个一个往里放,遇到size大于k就pop,最后剩下的顶上的就是第n大的。

如果是max heap,那么从pq的constructor直接把所有元素放进去,pop(k-1)次,剩下的就是第k大的

Creating a heap takes O(n) time while inserting into a heap (or priority queue) takes O(log(n)) time

另一种方法:用multiset 来做heap

multiset是maxheap有greater

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值