摘要:
合并排序: 合并排序算法是用来分治策略实现对n个元素进行排序的算法,其基本思想是:将待排序元素分成大小大致相同的两个子集合, 分别对两个子集合进行排序,最终将排好序的子集合并成要求的排好序的集合。 递归实现如下: 非递归实现如下:方法自个考虑,其实实现起来很简单。 阅读全文
摘要:
欧几里得算法: 百度百科:欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。 代码实现如下: 阅读全文
摘要:
像C++语言一样,java中,也有包装好的优先队列类PriorityQueue。 用法如下(模板代码): 工作安排问题: 问题描述:设有n件工作分配给n个人,将工作i分配给第j个人所需的费用为cij。试设计一个算法,为每个人都分配一件不同的工作,并使得总费用达到最小。 输入:第1行有1个正整数n(1 阅读全文
摘要:
题目大概是这样的:在有限的时间里,安排更多的活动。 策略一:先安排开始时间早的活动。 策略二:先安排活动持续时间短的活动。 策略三:先安排活动时间结束早的活动。 解题思想:很明显,正确的答案是策略三,先排序再选活动。 代码实现如下: 阅读全文
摘要:
题目:CodeForces - 363D 题意:给定n个学生,其中每个学生都有各自的私己钱,并且自己的私己钱只能用在自己买自行车,不能给别人。 给定m个自行车,每个自行车都有一个价格。 给定公有财产a。 然后求出这些学生能买自行车的最大数量,并且求当买下最大自行车数量时,总体花费私己钱的最少的钱。 阅读全文
摘要:
HDU - 1575 题目: A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973。 Input数据的第一行是一个T,表示有T组数据。 每组数据的第一行有n(2 <= n <= 10)和k(2 <= k < 10^9)两个数据。接下来有n行,每行有n个数据,每 阅读全文
摘要:
快速幂百度百科:快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。 HDU - 1061 代码实现如下: 阅读全文
摘要:
先来说说三分的思想: 从三分法的名字中我们可以猜到,三分法是对于需要逼近的区间做三等分: 我们发现lm这个点比rm要低,那么我们要找的最小点一定在[left,rm]之间。如果最低点在[rm,right]之间,就会出现在rm左右都有比他低的点,这显然是不可能的。 同理,当rm比lm低时,最低点一定在[ 阅读全文
摘要:
二分搜索百度百科:二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列 时间复杂度为:O(logn)。 题目如下: Binary Search For a given sequence A={a0, 阅读全文
摘要:
并查集 字面意思就是几个集合的并集,和这个并集的查找。 百度百科:并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合, 然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。 在博客上,看到一篇很生动的文章,关于并查集的。看了它, 阅读全文