leetcode刷题系列三。这一节的内容主要是容斥原理的题目和题解。

百度百科上容斥原理的解释:

在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理

公式

两个集合的容斥关系公式:A∪B =|A∪B| = |A|+|B| - |A∩B |(∩:重合的部分)
三个集合的容斥关系公式:|A∪B∪C|= |A|+|B|+|C| - |A∩B| - |B∩C| - |C∩A| + |A∩B∩C|

例题

算法分析

//求最大公约数
#define ll long long
int gad(int a,int b)
{return b==0?a:gad(b,a%b);
}
//求最小公倍数
ll lcm(int a,int b)
{return a*b/gad(a,b);
}
int getabc(int n,int a,int b,int c)
{ll num1=lcm(a,b);ll num2=lcm(b,c);ll num3=lcm(a,c)ll ans=n/a+n/b+n/c-n/lcm(a,b)-n/lcm(a,c)-n/lcm(b,c)+n/lcm(num1,lcm(num2,num3));return ans;
}

题目一

题目链接

#define ll long long
ll gcd(int a,int b)
{return b==0? a:gcd(b,a % b);
}ll lcm(int a, int b)
{return a / gcd(a,b) * b;
}int MIN(ll a, ll b)
{return a < b? a: b;
}int nthUglyNumber(int n, int a, int b, int c)
{ll num1 = lcm(a,b);ll num2 = lcm(b,c);ll num3 = lcm(a,c);ll num0 = lcm(num1,lcm(num2,num3));int min = MIN(a,MIN(b,c));ll left = min;ll right = min * n;ll mid = 0;while(left < right){mid = (left + right) / 2;int sum = mid / a + mid / b + mid / c - mid /num1 - mid / num2 -mid / num3 + mid / num0;if(sum >= n)right = mid;else if(sum < n)left = mid + 1 ;}return right;

题目二

题目链接

思路:考虑 dp[i][j]。最后一首歌,我们可以播放没有播放过的歌也可以是播放过的。如果未播放过的,那么就是 dp[i-1][j-1] * (N-j) 种选择方法。如果不是,那么就是选择之前的一首歌,dp[i-1][j] * max(j-K, 0)(j 首歌,最近的 K 首不可以播放)。

class Solution {
public:int numMusicPlaylists(int n, int len, int dis) {int mod=1e9+7;long dp[101][101];memset(dp,0,sizeof(dp));dp[0][0]=1;//i为听过歌的数量//j为听了多少首歌//dis是歌曲间隔for(int i=1;i<=n;i++){for(int j=1;j<=len;j++){dp[i][j]+=dp[i][j-1]*max(0,(i-dis));dp[i][j]+=dp[i-1][j-1]*(n-(i-1));dp[i][j]%=mod;}}return dp[n][len];}
};

总结

写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于 java开发 的学习思路及方向。从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。

由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的 点击我的Gitee获取。
还有 高级java全套视频教程 java进阶架构师 视频+资料+代码+面试题!

全方面的java进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。

leetcode刷题(三)——容斥原理相关推荐

  1. LeetCode刷题笔记- 15.三数之和

    LeetCode刷题笔记- 15.三数之和 C语言 题目 注意点 C语言 /*** Return an array of arrays of size *returnSize.* The sizes ...

  2. leetcode刷题之树(三)

    翻转二叉树,感觉做二叉树的问题好像都是那一套公式,除了个别的问题解决不了,用上篇博客leetcode刷题之树(二)的模型基本可以解决.总体来说就是树基本都可以利用递归和迭代的方法去解决,在涉及到树的遍 ...

  3. LeetCode刷题记录7——824. Goat Latin(easy)

    LeetCode刷题记录7--824. Goat Latin(easy) 目录 LeetCode刷题记录7--824. Goat Latin(easy) 题目 语言 思路 后记 题目 题目需要将一个输 ...

  4. LeetCode刷题记录5——441. Arranging Coins(easy)

    LeetCode刷题记录5--441. Arranging Coins(easy) 目录 LeetCode刷题记录5--441. Arranging Coins(easy) 题目 语言 思路 后记 题 ...

  5. LeetCode刷题记录1——717. 1-bit and 2-bit Characters(easy)

    LeetCode刷题记录1--717. 1-bit and 2-bit Characters(easy) LeetCode刷题记录1--717. 1-bit and 2-bit Characters( ...

  6. Leetcode刷题 463题:岛屿的周长(基于Java语言)

    ** Leetcode刷题 463题:岛屿的周长(基于Java语言) ** 一. 题目描述: 给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域. 网格中的格子水平和垂直方向相 ...

  7. c语言贪心算法合并箭,LeetCode刷题题库:贪心算法

    LeetCode刷题笔记:贪心算法 自大学开始,我便陆陆续续的学习一些 算法和数据结构 方面的内容,同时也开始在一些平台刷题,也会参加一些大大小小的算法竞赛.但是平时刷题缺少目的性.系统性,最终导致算 ...

  8. LeetCode刷题之旅

    LeetCode刷题之旅 一.链表 1.链表逆序(leetcode 206.Reverse Linked List)esay 题目描述:已知链表头节点指针head,将链表逆序. 思路:从链表的头节点依 ...

  9. C#LeetCode刷题-程序员面试金典

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#LeetCode刷题-程序员面试金典 | .Net中文网. C#LEETCODE刷题概述 概述 所有LeetCode程序员面试金典 ...

最新文章

  1. 手把手教你如何扩展GridView之自带CheckBox
  2. 为什么「反向传播」一定要在生物学上有对应?
  3. 10、Power Map—自定义地图背景
  4. 你觉得你个性上最大的优点是什么?
  5. 通过组策略批量安装Lync 2010客户端
  6. springboot logback自定义配置文件路径
  7. 删除变量PHP之session的使用
  8. python记录(5)- find() 与 rfind()
  9. java字符串数字统计_对字符串进行简单的字符数字统计 探索java中的List功能
  10. Discuz!客户端api开发(一)
  11. 转博答辩ppt_如何高质量的完成一个论文答辩ppt?
  12. vbs表白小程序,女生同意才能关掉。
  13. 玩转python(一)——微信远程控制电脑
  14. 决胜机房奥林匹克之LCA篇
  15. Python 计算KDJ指标
  16. 经典语录-每日积累-03
  17. WebRTC -- Windows平台编译
  18. 中级职称评审有什么要求呢?
  19. docker覆盖镜像默认命令之docker entrypoint
  20. Photoshop-填充和描边

热门文章

  1. 前后端分离跨域问题Access to XMLHttpRequest at ‘http://localhos...has been blocked by CORS policy: No ‘Access-
  2. 深入理解GlusterFS之数据均衡
  3. 计算hashCode通用计算公式
  4. shell综合练习(二)
  5. 一天一大 lee(计数二进制子串)难度:简单-Day20200810
  6. android support v13,java – 程序类型已存在:android.support.v13.v...
  7. Trie——51nod1526 分配笔名
  8. 今日新闻快讯摘要十条
  9. java代码自动回复_17.10.18 Java实现公众号关注自动回复图文
  10. 国内Linux笔记天花板,不接受反驳!