[杂谈] 15. 鸽巢原理及相关OJ例题

1. 鸽巢原理

鸽巢原理又名抽屉原理、鞋盒原理,是一种简单的组合数学思想,在编程OJ、ACM,中广泛应用,往往能够达到优越的空间复杂度、时间复杂度。多用于解决存在性问题。

2. 定理证明

定理: 如果把n+1个物体放入n个盒子,至少有一个盒子包含两个或更多的物体。

证明: 反证法 n个盒子每个盒子至多一个物品,总数至多为n,与有n+1个物体矛盾。
有等价定理:

定理2:m个元素放进n个集合内,至少有一个集合含有k个元素,其中 :

  • k=m/n (n整除m)

  • k=[m/n]+1 (n不整除m)

定理3: 把无穷多个元素放进有限个集合,必然至少有一个集合里有无穷多个元素。

3. 相关例题

3.1 OJ例题

OJ 的简单应用见博主的:[剑指-Offer] 3. 数组中重复的数字(哈希、抽屉原理、代码优化、多方法)

LeetCode 41. 缺失的第一个正数
LeetCode 442. 数组中重复的数据
LeetCode 448. 找到所有数组中消失的数字
《剑指-Offer》面试题3:数组中重复的数字

其它相关 OJ,也很多百度一下啥都有了~

3.1 组合数学相关例题

在此推荐这篇博文:guoyangfan_:鸽巢原理详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ypuyu

如果帮助到你,可以请作者喝水~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值