![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
Ethan-Walker
这个作者很懒,什么都没留下…
展开
-
元素去重、计数
package remove_duplicate;import java.util.*;/** * 元素去重 计数 * 数值范围 : [0,10000) * hash array set 预排序+双指针 基数排序 * 1 万 2(ms) 28 31 ...原创 2018-10-02 16:49:00 · 366 阅读 · 0 评论 -
八皇后问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问题。...原创 2018-07-28 20:32:00 · 123 阅读 · 0 评论 -
堆
应用:排序,从小到大用最大堆,从大到小用最小堆 选出元素中的 top k 个 top k 个最小数:数组前k个元素建大顶堆,后面的元素依次和堆顶比较,比其小则替换,重新调整建堆 top k 个最大数: 数组前 k 个元素建小顶堆package sort.heap;import java.util.Arrays;import java.util.Random;import ja...原创 2018-05-14 09:31:00 · 108 阅读 · 0 评论 -
快速排序
pivot 选择数组第一个元素 /** * 以第一个元素作为基准 * 不稳定 * @param arr * @param startIndex * @param endIndex */ public static void quickSort(int[] arr, int startIndex, int endInde...原创 2018-05-14 16:46:00 · 101 阅读 · 0 评论 -
PAT 乙级 1025 链表反转(数组反转)
数组反转的两种方式:新创一个数组,空间换时间 数组内部进行反转public void reverse(int *a, int start, int end){ while(start<end){ a[start] = a[start] + a[end] - (a[end] = a[start]); start+...原创 2018-04-22 17:34:00 · 185 阅读 · 0 评论 -
PAT 乙级 1042 统计字符个数
字符统计(20) 输入格式:输入在一行中给出一个长度不超过1000的字符串。字符串由ASCII码表中任意可见字符及空格组成,至少包含1个英文字母,以回车结束(回车不算在内)。输出格式:在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。输入样例:This is a simple TEST....原创 2018-04-22 13:29:00 · 128 阅读 · 0 评论 -
循环 buffer 实现
1. 数组实现/** * Created by lenovo on 2018/4/21. * 实现简单的循环Buffer * 用定长数组实现,队列结构,先入先出 */public class RingBuffer<T> { private int head; // head 作为队列头,作为新插入元素的位置 private int tail;...原创 2018-04-21 20:55:00 · 586 阅读 · 0 评论 -
整数划分问题
整数划分问题是算法中的一个经典命题之一,有关这个问题的讲述在讲解到递归时基本都将涉及。所谓整数划分,是指把一个正整数n写成如下形式:n=m1+m2+…+mi; (其中mi为正整数,并且1 <= mi <= n),则{m1,m2,…,mi}为n的一个划分。如果{m1,m2,…,mi}中的最大值不超过m,即max(m1,m2,…,mi)<=m,则称它属于n的一个m划分。这里我们...原创 2017-11-19 14:23:00 · 392 阅读 · 0 评论 -
实现两个数据的交换
<span style="font-size:14px;">/* 面试题: 请自己实现两个整数变量的交换*/</span>class OperatorTest { public static void main(String[] args) { int a = 10; int b = 20; ...原创 2016-09-03 19:30:29 · 481 阅读 · 0 评论 -
poj 2503 map应用 与 C 输入问题
BabelfishTime Limit: 3000MS Memory Limit: 65536K Total Submissions: 41067 Accepted: 17494 DescriptionYou have just moved from Waterloo to a big city. The people here speak an i...原创 2016-08-19 19:37:41 · 358 阅读 · 0 评论 -
Trie树的应用
补充知识:binary_search 函数既可以用来普通数字数组的二分查找,也能用来二分查找字符串数组,但前提是字符串数组是按字典序的顺序排好,不过貌似在普通数组中,排序后的数组可直接用binary_search( first,last, value)(应该是默认从小到大排序),但对于字符串数组,用binary_search要自定义一个与其排序规则相同的比较函数例如:bool comp( st...原创 2016-07-28 00:37:22 · 236 阅读 · 0 评论 -
Trie简要模板(动态实现和静态实现)
动态实现 //动态trie的实现(占据内存大,但速度快)#include <iostream>#include <vector>#include <string>#include <cstdio>#include <cstring>using namespace std;const int branc...原创 2016-07-28 00:12:03 · 420 阅读 · 0 评论 -
poj -2559
DP:用2个数组r[i],l[i]表示以第i个矩形的高度并包含这个矩形所组成的最大矩形的左右宽度的边界位置;扩展左边界:1。如果第j个矩型的高度比第i个矩阵(1<j<i)的高度低则做边界位置为i,即l[i]=j+1,终止;2。如果高(或相等),则继续向左扩展,直到符合条件1。就终止。扩展右边界:类扩展左边界。以下对于扩展左边界的解释:n(100000)数...原创 2016-07-24 01:43:38 · 269 阅读 · 0 评论 -
单调栈(poj -- 2559)
单调栈,顾名思义就是说栈内的元素,按照某种方式排序下,必须是单调的。如果新入栈的元素破坏了单调性,就弹出栈内元素,知道满足单调性。它可以很方便地求出某个数的左边或者右边第一个比它大或者小的元素,而且总时间复杂度O(N)。 1. 题目大意:链接给出一个柱形统计图(histogram), 它的每个项目的宽度是1, 高度和具体问题有关。 现在编程求出在这个柱形图中的最大...原创 2016-07-23 20:54:20 · 3677 阅读 · 1 评论 -
ST表的应用(poj--3368)
DescriptionYou are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. In addition to that, you are given several queries consisting of indicesi and j (1 ≤ i ≤ j ≤ n). For eac...原创 2016-07-23 06:21:40 · 508 阅读 · 0 评论 -
ST表与二分 (CodeForces 689D-Friends and Subsequences)
Friends and Subsequences题目链接:http://acm.hust.edu.cn/vjudge/contest/121333#problem/HDescriptionMike and !Mike are old childhood rivals, they are opposite in everything they do, except progra...原创 2016-07-23 04:35:13 · 318 阅读 · 0 评论 -
RMQ--ST表算法理解
RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大值。 ST算法(Sparse Table),ST(Sparse Table)算法是一个非常有名的在线处理RMQ问题的算法,它可以在O(nlogn)时间内进行预处理,然后在O(1...原创 2016-07-21 11:59:59 · 3429 阅读 · 4 评论 -
从最简单的必胜态入手
http://acm.hdu.edu.cn/showproblem.php?pid=1525 HDU 1525题意:给定两个正整数a,b。每次操作,可以将大的数减掉小的数的整数倍(减去后不能为负数)。如果一个操作者,将a,b中一个数变成0时游戏结束,并且该玩家胜利。求先手必胜还是后手必胜。 分析:不妨设a>b. ① 若a%b==0先手必胜。 ...原创 2016-07-19 13:18:07 · 795 阅读 · 0 评论 -
HDU 1564 考虑奇偶性的变化
http://acm.hdu.edu.cn/showproblem.php?pid=1564从一个n*n的角落出发,每次移动到相邻的,而且没有经过的格子上。谁不能操作了谁输。结论就是n为偶数,先手赢,奇数,后手赢。可以看下图 S表示起点。如果n为偶数,那么所有格子可以被2*1的砖块覆盖掉。这样先手每次都移动到当前1*2的另外一块。先手必赢。 如果n为奇数。出...转载 2016-07-18 16:14:02 · 238 阅读 · 0 评论 -
博弈论总结
我只是个搬运工…… 博弈论小结by xaphoenix写在前面第一次写一个专题的总结,由于笔者水平有限,所以里面肯定会有很多不恰当之处,希望读者不吝赐教。此外,这个小结中,有大约2000字的直接复制粘贴的知识介绍,有几道题的题目分析或者题意概括来源于网上各位大牛的博客,所以笔者不具有著作权,具体的参考资料在本文最后列出。另外,为了节省页数(准备把这个带到现场),所以排版比较凌乱...转载 2016-07-18 16:00:39 · 8494 阅读 · 1 评论 -
博弈论总结
首先当然要献上一些非常好的学习资料:基础博弈的小结:http://blog.csdn.net/acm_cxlove/article/details/7854530经典翻硬币游戏小结:http://blog.csdn.net/acm_cxlove/article/details/7854534经典的删边游戏小结:http://blog.csdn.net/acm_cxlove/articl...转载 2016-07-18 14:33:48 · 364 阅读 · 0 评论 -
尼姆博弈(n堆)
原创 2016-07-18 13:29:57 · 566 阅读 · 0 评论 -
威佐夫博弈(2堆)--取石子游戏(将胜态转变成必败态)
http://acm.hdu.edu.cn/showproblem.php?pid=2177 分析思路见注释: #include <iostream>#include <cmath>using namespace std;int main(){ long long a,b,i; double t=(sqrt(5)+1)*...原创 2016-07-18 11:56:45 · 476 阅读 · 0 评论 -
威佐夫博弈(2堆)应用-- HDU 1527 取石子游戏
Problem Description有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。 Input输入包含若干行,表示若干种石子的...原创 2016-07-18 01:27:01 · 582 阅读 · 0 评论 -
对vector等STL容器进行排序
西方有句谚语:不要重复发明轮子!STL几乎封装了所有的数据结构中的算法,从链表到队列,从向量到堆栈,对hash到二叉树,从搜索到排序,从增加到删除......可以说,如果你理解了STL,你会发现你已不用拘泥于算法本身,从而站在巨人的肩膀上去考虑更高级的应用。排序是最广泛的算法之一,本文详细介绍了STL中不同排序算法的用法和区别。1 STL提供的Sort 算法C++之所以得到这么多人...转载 2016-07-18 00:45:29 · 339 阅读 · 0 评论 -
巴什博奕
实例: 分析:1张牌,先抓胜。 2张牌,先抓胜。 3张牌,后抓胜。 4张牌,先抓胜。 5张牌,分析:先抓的人第一次不能让自己胜,那尽量使剩下的牌数 得到的结果一定是后抓胜,如果不能,则说明结果是后抓胜。剩下3张牌的结果是后抓胜,所以先抓的人先抓2张,这样自己一定保证胜。 ...原创 2016-07-17 22:57:59 · 238 阅读 · 0 评论 -
Floyd算法--+贪心算法
http://poj.org/problem?id=3615题目大意:给你n个站,有m条边,每条边有一个耗费值。问你如果A站到B站可通,选一条路,每条可行路径上的相邻两站的耗费值有一个确定的最大值,使得尽量让这个值最小,输出。否则输出-1.(有向无环图)分析:先确定任意两站间的最短路径,再找最大耗费值 #include <iostream>#incl...原创 2016-07-17 21:53:31 · 1933 阅读 · 0 评论 -
Floyd --任意两点之间的最短路问题
http://bbs.ahalei.com/thread-4554-1-1.html【啊哈!算法】算法6:只有五行的Floyd最短路算法[复制链接] 电梯直达 楼主 发表于 2014-3-25 08:08:22|只看该作者|只看大图 暑假,小哼准备去一些城市旅游。有些城市之间有公路...转载 2016-07-17 17:12:38 · 827 阅读 · 0 评论 -
区间选点问题
<a target=_blank target="_blank" href="http://acm.hdu.edu.cn/showproblem.php?pid=2037">http://acm.hdu.edu.cn/showproblem.php?pid=2037</a>#include <iostream>#include <cmath>...原创 2016-07-17 16:34:11 · 314 阅读 · 0 评论 -
poj --3614 Sunscreen
http://poj.org/problem?id=3614 题意有C个奶牛去晒太阳 (1 <=C <= 2500),每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值,太大就晒伤了,太小奶牛没感觉。而刚开始的阳光的强度非常大,奶牛都承受不住,然后奶牛就得涂抹防晒霜,防晒霜的作用是让阳光照在身上的阳光强度固定为某个值。那么为了不让奶牛烫伤,又不会没有效果。给...原创 2016-07-17 16:01:06 · 239 阅读 · 0 评论 -
二分应用--衣服晾干问题
有n件衣服需要晾干,每件含水量ai.每件衣服每分钟自然干1单位的水.每分钟可以对其中任意一件使用吹风机,其可以减少k的水.求晾干所有衣服的最少时间. 分析思路:利用二分逼近的思想。假设需要 x 分钟能够晾干,则含水量ai<=x的衣服让其自然晾干,ai>x的衣服需要吹风机,设其需要吹风机的吹的时间为ti, 则(x分钟能吹干的水量)ti * k + x-ti >=...原创 2016-07-16 21:16:25 · 512 阅读 · 0 评论 -
贪心题例
贪心各种问题: 贪心思想在许多算法中都有体现。例如,图论中求最短路的Dijkstra算法,求最小生成树的Prim算法和Kruskal算法都是典型的贪心算法。 贪心思想的理论部分不难理解,关键就在于面对不同问题的时候,能否准确地发现问题的最优策略。对于简单的题目而言,贪心策略往往是显而易见的,但更多的情况下,贪心策略是需要通过分析很多推理得到的。 ①如:给出n个数{a_...原创 2016-07-15 23:26:14 · 1201 阅读 · 0 评论 -
区间覆盖问题
区间覆盖问题思想:给出数轴上的n各闭区间[a_i,b_i],选择尽量少的区间覆盖一条指定线段[s,t]。 首先,既然目标是覆盖线段[s,t],那么每个区间在这个范围之外的部分是不起任何作用的,先将它们切去。所谓切去是指如果一个区间的左端点小于s,那么将它的左端点改为s,如果一个区间的右端点大于t,那么将它的右端点改为t。 接着,将各个区间按照左端点从小到大的顺序排序。如果左端点最小...原创 2016-07-15 14:35:49 · 1107 阅读 · 0 评论 -
区间选点问题---poj-1328
解题思路:题意为,在一个坐标系中,x中代表海岸,x轴以上有n个点,代表着n个岛屿,在x轴上建雷达,一直雷达的覆盖范围为半径为d的圆,求在x轴上最少建多少个雷达,才能把全部的岛屿覆盖起来,如果不能覆盖,输出-1.区间选点问题为 给定 n个闭区间,求在里面选择最少的点使得每个区间里面都包含至少一个点(一个点可以在不同的区间)。 比如下图。贪心策略为 把n个区间先按照右端点从小到...原创 2016-07-14 20:08:17 · 668 阅读 · 0 评论 -
贪心--区间选点问题
数轴上有n个闭区间[a_i,b_i]。请选择尽量少的点,使得每个区间内都至少有一个你选择的点。 思考:选择什么样的点才是最划算的? 一个直观的思想是这样的,既然我要选择尽量少的点使得每一个区间都包含至少一个我选的点,那么我选的点一定的“发挥最大效力的”,也就是说,能够使得尽量多的区间包含我所选择的点。最理想的情况下,假设这n个闭区间的交集不为空,那么只要选择位于交集内的一个点,就可以满...原创 2016-07-14 18:39:42 · 3048 阅读 · 0 评论 -
DFS--poj 2488
http://poj.org/problem?id=2488大致题意:给出一个p行q列的国际棋盘,马可以从任意一个格子开始走,问马能否不重复的走完所有的棋盘。如果可以,输出按字典序排列最小的路径。打印路径时,列用大写字母表示(A表示第一列),行用阿拉伯数字表示(从1开始),先输出列,再输出行。分析:如果马可以不重复的走完所有的棋盘,那么它一定可以走到A1这个格子。所以我们只需从A1这个格子...原创 2016-07-13 22:24:13 · 389 阅读 · 0 评论 -
算法导论---DP之钢条切割问题
假设公司出售一段长度为i英寸的钢条的价格为Pi(i = 1, 2, ...单位:美元),下面给出了价格表样例:长度i 1 2 3 4 5 6 7 8 9 10价格Pi 1 5 8 9 10 17 17 20 24 30切割钢条的问题是这样的:给定一段长度为n英寸的钢条和一个价格表Pi,求切割方案,使得销售收益Rn...原创 2016-07-13 20:18:21 · 448 阅读 · 0 评论 -
poj 1111bfs
http://poj.org/problem?id=1111 题目大意: 输入一个矩阵,再输入其中一个“X”的位置(从1开始)。从该位置向八个方向扩展,如果是“X”就可以并在一起。问最后得到的模块的周长是多少。 解题思路: 按照广搜的思路来做。用一个二维的数组标记每一个点,-1代表着该点不能被搜索了(可能原本就是“.”,也可以该点已经出队列了);0代表着该点还没被搜到;...原创 2016-07-13 17:50:35 · 219 阅读 · 0 评论 -
UVA 10152
10152 - ShellSort 18905 34.82% 2697 81.79% 题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=103&page=show_problem&...转载 2016-07-12 00:18:11 · 257 阅读 · 0 评论 -
STL priority_queue 优先级队列
http://www.cplusplus.com/reference/queue/priority_queue/ 在STL里有这个priority_queue,实现优先队列的结构。在优先队列中,优先级高的元素先出队列。现在在这里说说用法吧其实就三种用法第一种,直接使用默认的。它的模板声明带有三个参数,priority_queue<Type, Container, ...转载 2016-07-09 13:02:58 · 760 阅读 · 0 评论