leetCode数据结构基础 | 感觉最近不在状态QWQ。慢慢来吧。75.颜色分类 705.设计哈希集合 706.设计哈希映射

文章介绍了数组中0,1,2的排序方法,包括不同遍历策略,以及哈希集合和哈希映射的设计原理,如哈希函数、冲突处理和扩容机制。还提及了简单的哈希表实现,如链地址法,以及erase函数和make_pair的使用。
摘要由CSDN通过智能技术生成

75.

1.可以统计出数组中 0,1,2 的个数,再根据它们的数量,重写整个数组。

2.对数组进行两次遍历。指针ptr,在第一次遍历中,我们将数组中所有的 0 交换到数组的头部。在第二次遍历中,我们将数组中所有的 1交换到头部的 0 之后。此时,所有的 2 都出现在数组的尾部。

3.对数组进行一次遍历,用指针 p0​ 来交换 0,p1来交换 1,初始值都为 0。

如果找到了 1,那么将其与 nums[p1]进行交换,并将 p1 向后移动一个位置,

如果找到了 0,如果 p0<p1​,那么需要先将 nums[i] 与 nums[p0]进行交换,再将 nums[i] 与 nums[p1]进行交换。

4.也可以使用指针 p0​ 来交换 0,p2来交换 2。p0的初始值仍然为 0,而 p2 的初始值为 n−1。

指针 p2 是从右向左移动的,因此当从左向右遍历整个数组时,如果遍历到的位置超过了 p2,那么就可以直接停止遍历了。

如果找到了 0,将其与 nums[p0] 进行交换,并将 p0​ 向后移动一个位置。

如果找到了 2,将 nums[i]与 nums[p2]进行交换之后,新的 nums[i]可能仍然是 2,也可能是 0。然而此时结束了交换,开始遍历下一个元素 nums[i+1],不会再考虑 nums[i] 了,这样我们就会得到错误的答案。因此,当找到 2 时,需要不断地将其与 nums[p2]进行交换,直到新的 nums[i]不为 2。

705.设计哈希集合

要解决的问题:

  • 哈希函数:能够将集合中任意可能的元素映射到一个固定范围的整数值,并将该元素存储到整数值对应的地址上。
  • 冲突处理:由于不同元素可能映射到相同的整数值,因此需要在整数值出现「冲突」时,需要进行冲突处理。
  • 扩容:当哈希表元素过多时,冲突的概率将越来越大,而在哈希表中查询一个元素的效率也会越来越低。因此,需要开辟一块更大的空间,来缓解哈希表中发生的冲突。

 一个最简单的哈希表实现:链地址法。

设哈希表的大小为 base,则可以设计一个简单的哈希函数:hash(x)=x mod base。

开辟一个大小为 base 的数组,数组的每个位置是一个链表。当计算出哈希值之后,就插入到对应位置的链表当中。

由于使用整数除法作为哈希函数,为了尽可能避免冲突,应当将 base 取为一个质数。在这里,我们取 base=769。

erase函数的用法:

706.设计哈希映射

pair和make_pair的用法:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值