
算法篇
文章平均质量分 98
阳光的羊羊羊羊
阳光向上
展开
-
前缀和
前缀和是一种重要的预处理,能大大降低查询的时间复杂度。最简单的一道题就是给定 n 个数和 m 次询问,每次询问一段区间的和。求一个 O(n + m) 的做法。用 O(n) 前缀和预处理,O(m) 询问。主要代码 for (int i = 1; i <= n; i++) { sum[i] = sum[i - 1] + a[i];...原创 2020-08-03 08:43:31 · 125 阅读 · 0 评论 -
枚举圆内格点
如果在一个矩形的格点图中,给定圆心坐标,还有半径,如何快速枚举圆内格点的坐标设x,y为原点坐标,r为半径 for(int i=max(1,x-r);i<=min(n,x+r);i++) for(int j=max(1,y-r);j<=min(m,y+);j++)解释:因为从哪一行开始枚举取决于x-r,但是x-r可能小于1也就是越界了,所以在x-r和1当中选...原创 2020-08-03 08:42:44 · 609 阅读 · 4 评论 -
贪心算法
贪心算法经典例题:暂时不知道贪心算法的概念,以后补上,先更新一道例题吧!确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了所有你喜欢看的电视节目的转播时间...原创 2020-08-03 08:43:42 · 220 阅读 · 0 评论 -
深度优先搜索
1, DFS求迷宫路径DFS(Depth-First-Search,深度优先搜索),顾名思义总是选择深度大的节点去访问,下面的图是一个二叉树,如果从头结点F开始深度优先遍历,若访问了C则下一个节点不可能是E,因为C和E的深度是一样的,违反深度优先原则。深度优先遍历序列不唯一。DFS模版:void dfs()//参数用来表示状态 { if(到达终点状态) {...原创 2021-01-12 11:11:15 · 939 阅读 · 2 评论 -
计算日期是星期几
首先看下百度百科的基姆拉尔森计算公式定义: 基姆拉尔森计算公式 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7+1 在公式中d表示日期中的日数,m表示月份数,y表示年数。 注意:在公式中有个与其他公式不同的地方: 把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。...原创 2020-08-03 08:44:24 · 172 阅读 · 0 评论 -
全排列与康拓逆展开
(算法)全排列的递归算法Java实现过程一、无重复项的全排列全排列的数学定义就不再过多解释,考虑递归算法的实现可从下面几点入手(以数组为例,如对其他元素排列,将元素编号放入数组即可):1、一个数的全排列,如排列{1},就是这个数本身这一种情况2、两个数的全排列,如排列{1,2}:第一步:将{1}放在第零个位置,剩下的{2}进行一个数的全排列,结果为{1,2}第二步:将{...原创 2020-04-24 22:00:04 · 134 阅读 · 0 评论 -
动态规划及其应用
动态规划杭电oj做到了最大子序列和,自己的换了好多方法都超时了,网上一查需要用到动态规划,趁此机会学习一下动态规划但是感觉动态规划有点像这个递归哈哈哈哈1.动态规划,就是利用历史记录来避免计算的重复,而这些历史记录我们需要一些变量来保存,一般用到一维数组还有二维数组来保存2.三个步骤...原创 2020-04-24 21:59:47 · 1529 阅读 · 2 评论 -
素数的快速判定
判断素数的方法定义:“1不是质数。质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。所以1不是质数。质数的个数是无穷的。欧几里得的《几何原本》中有一个经典的证明。它使用了证明常用的方法:反证法。”约数只有1和本身的整数称为质数,或称素数。判断前2到n个数的...原创 2020-04-24 22:06:20 · 2648 阅读 · 0 评论 -
大数处理以及用法
大数的相关操作创建大数 BigInteger a=new BigInteger("123456");//参数一定要是字符串 BigInteger a=BigInteger.valueOf(123);//参数可以是int或long,不能是小数 大数赋值BigInteger a=in...原创 2020-01-15 23:32:19 · 445 阅读 · 1 评论 -
冒泡排序
冒泡排序最近应我最爱的宝贝饭饭的需求,写一篇关于冒泡排序的文章,一方面帮助饭饭的理解,一方面自己做个笔记一般来说,一组数据排序可以直接使用Arrays.sort直接排序,但是有的题型,需要利用到冒泡排序:上面的图表展示了冒泡排序的整体过程,其实就是每次找出两两相邻的最大值,也就是第一次找到一个最大值排到最...原创 2020-01-12 22:04:04 · 450 阅读 · 0 评论 -
九余定理
九余定理求一个数的数字根问题,首先要知道什么是数字根数字根(Digital Root)就是把一个自然数的各位数字相加,再将所得数的各位数字相加,直到所得数为一位数字为止。而这个一位数便是原来数字的数字根。例如: 198的数字根为9(1+9+8=18,1+8=9)int d = 198;如果...原创 2020-01-02 14:13:25 · 261 阅读 · 0 评论 -
快速幂运算详解加解析(新人秒懂)
快速幂运算 普通的幂运算,例如2的10次方,是按照2乘2乘2.........一直到乘以十个二,如果指数比较小,那么时间还算小,如果遇到特别大的数,时间就会显得非常巨大,所以在此介绍快速幂的方法(方法有很多,在此只介绍易懂的);在介绍这种快幂的方法之前,需要简单介绍几个小知识点;二...原创 2020-08-03 08:42:06 · 3561 阅读 · 2 评论 -
二分法查找的java实现
算法 .二分法二分法也就是折半查找,在 有序 的数列中查找指定的元素,设定最小索引(low)和最大索引(height-1)还有中间值mid((low+height-1)/2),这种查找,如果中间值比指定元素小让low=mid+1,如果中间值比指定元素大,让height=mid-1;以上是大体思路,下面展示两个动图,帮助理解...原创 2020-04-24 22:04:00 · 815 阅读 · 0 评论