算法
爱玲姐姐
大家好,我是计爱玲,英文名:Cathy,是一名前端开发工程师,热爱解锁各种前端新技术。我的爱豆是王一博,当然我也想认识更多同行的帅哥,
我的微信jal517486222,欢迎加我好友交流编程技术*^_^*
个人网站:https://jiailing.com
展开
-
PAT-A-1078 Hashing (25 分) 哈希表二次探测再散列 C++题解
1078 Hashing (25 分)题目传送门:1078 Hashing (25 分)一、题目大意将给定长度为n的数组放到长度为M的哈希表中,如果M不是素数,则将M往后扩大到M后面的第一个素数。在哈希时如果冲突,则二次探测再散列。刚开始没注意这一句:Quadratic probing (with positive increments only) is used to solve the...原创 2019-08-29 21:55:26 · 1274 阅读 · 0 评论 -
无向图的邻接矩阵的深度优先搜索和广度优先搜索(C++实现)
一、深度优先搜索深度优先搜索遍历类似于树的先根遍历,是树的先根遍历的推广。其过程为:假设初始状态是图中所有顶点未曾被访问,则深度优先搜索可以从图中的某个顶点v出发,访问此顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作为起始点,重复上述过程,直至图中所有顶点都被访问到为止。1. ...原创 2019-01-30 11:25:00 · 6101 阅读 · 0 评论 -
java实现八大经典排序(冒泡、选择、插入、归并、快速排序、堆排序、希尔排序、桶排序)
一、冒泡排序 BubbleSortclass BubbleSort { public int[] bubbleSort(int[] A, int n) { // write code here for (int i = 1; i < n; i++) { for (int j = 0; j < n - 1; j++) {...原创 2019-02-01 14:27:32 · 1065 阅读 · 2 评论 -
Java实现桶排序
import java.util.Arrays;import java.util.LinkedList;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); ...原创 2019-01-15 18:09:26 · 732 阅读 · 1 评论 -
C++实现计算中缀式(转后缀式来计算)
题目:输入一个中缀表达式,计算其结果。输入的前提假设:(1)只考虑+、-、*、/这四种运算符,中缀表达式中只有一种括号:();(2)输入的中缀表达式中只有整数,没有小数;(3)假定输入是合法的。一、如何将中缀表达式转化为后缀表达式在日常应用中,算术表达式中运算符总是出现在两个操作数之间,例如5*(7-23)+8/2,这种形式称为中缀表达式。计算一个中缀表达式需要知道运算符的优先级和结合...原创 2019-01-21 12:46:34 · 1370 阅读 · 0 评论 -
归并排序求逆序对和比较次数+Java代码实现
import java.util.Arrays;import java.util.LinkedList;import java.util.Scanner;public class Main { static int cnt = 0, n; static int []a, b; public static void main(String[] args) { ...原创 2019-01-15 16:58:21 · 1408 阅读 · 0 评论 -
最大值最小问题,二分答案+Java代码实现
题意简述:长度为n的数组,分成k段,每段的和最大值最小是多少解题关键:首先,解一定存在,最大解就是数组的所有元素之和。其次,如果数组进行划分后,每段之和都不超过m,划分为了t段,那一定可以划分为t-1段。所以我们只需要二分查找能否划分为不超过k段即可,当小于等于k段后,一定可以扩展为k段(因为只需要将某几段拆开就好了)题目描述You are given n packages of w...原创 2019-01-15 13:50:33 · 1665 阅读 · 0 评论 -
汉诺塔(Hanoi)移动过程递归打印---Java
题目介绍题目描述用递归的方法输出Hanoi(汉诺)塔问题的解决步骤。汉诺塔问题描述如下:古代有一个梵塔,塔内有3个座A、B、C。初始时A座上有n个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这n个盘子从A座移动到C座,但是每次只允许移动一个盘子,而且在移动过程中在3个座上需要始终保持大盘在下,小盘在上,在移动过程中可以使用B座。要求使用递归的方法模拟并输出移动的步骤。输入一...原创 2018-12-19 19:02:38 · 2165 阅读 · 1 评论 -
在数组中二分查找指定的数----时间复杂度O(log N)Java解法
二分查找----时间复杂度O(logN)O(log N)O(logN)题目描述给定15个按从大到小已经有序的整数,将其放在一个数组中。另外输入一个整数,要求使用折半查找法找出该数是数组中的第几个元素的值。如果该数不在数组中,则输出“NO”。输入第一行有15个整数,即15个从大到小已有序的原始整数。第二行有一个整数,表示需要使用折半查找法查找的元素。输出如果查找到了输入的整数,则输出此...原创 2018-12-19 18:28:25 · 2167 阅读 · 0 评论 -
怎么判断年份是否为闰年
四年一润,百年不闰, 四百年再润封装成函数,一行就好bool prime(int n){//返回1表示闰年,0表示非闰年 return ((n % 4 == 0 && n % 100 != 0) || n % 400) == 0;}...原创 2018-11-28 19:59:43 · 10629 阅读 · 1 评论 -
C++某个日期是判断一年中的第几天
C++某个日期是判断一年中的第几天AOJ2188#include<bits/stdc++.h>using namespace std;bool prime(int n){ return (n % 4 == 0 && n % 100 != 0) || (n % 400 == 0);}int main(){ int a[13] = {0, 31, 28...原创 2018-11-28 22:04:28 · 9498 阅读 · 1 评论 -
报数---报到三的人出圈,最后剩下数
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。AOJ2186#include<bits/stdc++.h>using namespace std;int main(){ int n; cin >> n; vector<int>v(n+1); for(int i = 1; i ...原创 2018-11-28 21:56:28 · 1224 阅读 · 0 评论 -
2019.1.25-2019.2.10大四寒假在家算法学习总结
排序import java.util.Arrays;class BubbleSort { public int[] bubbleSort(int[] A, int n) { // write code here for (int i = 1; i &lt; n; i++) { for (int j = 0; j &lt; n -...原创 2019-02-10 19:47:07 · 1271 阅读 · 2 评论 -
C++实现字典树的增删查写前缀打印
C++实现字典树的增删查写前缀打印//// Created by jal on 19-3-9.//#include <bits/stdc++.h>using namespace std;const int SIZE = 26;struct Node{ int sum; bool isEnd; char val; vector<Node...原创 2019-03-09 13:39:31 · 1278 阅读 · 1 评论 -
PAT-A-1043 Is It a Binary Search Tree (25 分)递归判断二叉查找树 C++题解
1043 Is It a Binary Search Tree (25 分)题目传送门:1043 Is It a Binary Search Tree (25 分)一、题目大意判断给定的序列是否可以构成一个二叉查找树或镜像二叉查找树。二、解题思路递归判断指定的区间序列是否是二叉查找树的先序。区间[left, right]中,left是先序二叉树的根,设p为左子树的右端点,q为右子树的右...原创 2019-08-21 14:48:40 · 777 阅读 · 0 评论 -
PAT-A-1057 Stack (30 分) 树状数组+二分 (C++题解)
1057 Stack (30 分)题目传送门:1057 Stack (30 分)一、题目大意模拟栈的操作,增加找栈中中位数的功能二、解题思路第一次写树状数组知识点的题,之前一直不懂树状数组,感觉不好理解那个后缀数组,今天看到一篇很好的文章终于搞懂了树状数组,感谢这位大佬的博客:树状数组简单易懂的详解通过树状数组维护数组,快速得到前缀和,然后就通过常规的二分,来快速找到中位数。三、A...原创 2019-08-24 18:42:05 · 824 阅读 · 0 评论 -
PAT-A-1040 Longest Symmetric String (25 分) 动态规划求最长对称字串 C++题解
1040 Longest Symmetric String (25 分)题目传送门:1040 Longest Symmetric String (25 分)一、题目大意求字符串的最大对称子串的长度二、解题思路这道题可以用动态规划来处理,转移方程为:dp[i]=dp[i−1]+2,当s[i]==s[i−1]dp[i] = dp[i-1] + 2, 当s[i] == s[i-1]dp[...原创 2019-08-20 14:50:33 · 817 阅读 · 0 评论 -
PAT-A-1030 Travel Plan (30 分)双重指标(最短路径、最小花费)的Dijkstra算法(使用优先级队列)+打印路径(C++题解)
1030 Travel Plan (30 分)题目传送门:1030 Travel Plan (30 分)一、题目大意给定城市之间的距离和费用,求出发点和终点之间最短路径,如果最短路径有多条,则求最短路径中的最小花费,并且打印路径。Sample Input:4 5 0 30 1 1 201 3 2 300 3 4 100 2 2 202 3 1 20Sample Outpu...原创 2019-08-15 00:54:15 · 766 阅读 · 0 评论 -
PAT-A-1033 To Fill or Not to Fill (25 分)贪心算法 C++题解
1033 To Fill or Not to Fill (25 分)题目传送门:1033 To Fill or Not to Fill (25 分)一、题目大意求从杭州站到目的站的最小油费。杭州站与目的站之间有很多个加油站,每个加油站的油价不同。如果无法到达输出最大行驶距离,否则输出到达目的站的最小油费。二、解题思路这道题很明显是贪心算法,但是具体怎么求下一站点,还挺复杂的。注意:题...原创 2019-08-18 20:46:41 · 886 阅读 · 0 评论 -
PAT-A-1010 Radix (25 分) 二分求解
1010 Radix (25 分)一、题目大意给出两个数n1,n2,还给出tag和radix,如果tag为1,则radix为n1的进制,如果tag=2,则radix为n2的进制,求另一个数在什么进制下与这个数相等。二、解题思路首先:当tag=2时,swap(n1,n2)此题有坑。我刚开始以为所求进制只是从2到36,因为输入的两个数中只有0-z,分别代表基数0-35,然鹅,提交了好多次...原创 2019-07-28 21:22:56 · 849 阅读 · 0 评论 -
AOJ2903. USACO 3.1.2 Score Inflation (完全背包)
USACO 3.1.2 Score Inflation (完全背包)一、题目大意题目传送门:USACO 3.1.2 Score Inflation 二、解题思路这是个典型的完全背包,就是不限定物品数量,求最大价值。刚开始用贪心写的,居然过了11/12的数据,可怕,最后一组过不了,换成了dp才过了全部数据。我以为根据比重排序就行了,但想想感觉好像有点问题,幸好最后一组数据让我WA掉了,要不...原创 2019-07-24 15:48:56 · 734 阅读 · 0 评论 -
PAT-A-1004 搜索树的每层叶节点的数目,广度优先搜索(BFS)C++题解
1004 Counting Leaves (30 分)题目大意题目传送门:PAT-A-1004求树每层叶节点(0个子节点)的数量解题思路题目的这种输入简直就是为邻接表准备的原创 2019-07-24 07:22:27 · 1022 阅读 · 1 评论 -
PAT-A-1003 图论Dijkstra算法+DFS打表(C++题解)
题目大意题目传送门:PAT-A-1003求最短路径的数量,和最短路径中的最大点权和解题思路Dijkstra算法求最大点权和的最短路径,+DFS(打表)求最短路径数量AC代码代码解析见文中注释部分#include <bits/stdc++.h>using namespace std;template <typename T = int>T read(){...原创 2019-07-24 00:38:27 · 920 阅读 · 0 评论 -
2017年安徽省ACM竞赛J题《看似简单的题目》C++题解----奇数项欧拉函数(带模)的和
2017年安徽省ACM竞赛J题《看似简单的题目》C++题解----奇数项欧拉函数(带模)的和花了四个多小时终于A掉了这道题原创 2019-05-02 00:24:53 · 1363 阅读 · 1 评论 -
C++产生素数表----滚动数组,另加快速判断小规模素数的小函数
C++产生素数表----滚动数组vector<int>primes = {2,3,5};void init(int n){ for(int i = primes.back()+2; i <= n; i+= 2){ bool flag = true; for(auto p : primes){ if(p * p &...原创 2019-05-01 16:54:05 · 962 阅读 · 0 评论 -
蚂蚁感冒
AOJ1641 蚂蚁感冒 题目描述长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。 这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。输入第一行输入一个整数n (1 &lt; n...原创 2018-11-08 12:01:17 · 1099 阅读 · 0 评论 -
最优找零问题。贪心/动态规划
一、假设货币面额有1,2,5,10,20,50,100,每种数量都无限多,现在给出金额n(1<=n<=100000),求出最少的货币数量。这种题可以用贪心来做,因为前n-1项的和都不超过第n项的值,所以符合贪心的规则。#include<bits/stdc++.h>using namespace std;int main(){ vector<int>...原创 2018-11-06 14:53:36 · 5803 阅读 · 2 评论 -
动态规划求最长上升子序列两种算法
动态规划求最长上升子序列两种算法一、O(N2){O(N^2)}O(N2)算法#include<bits/stdc++.h>using namespace std;int main(){ int n; while(cin >> n){ int v[n+1]; for(int i = 1; i <= n; i++){ cin >> v[i...原创 2018-11-06 14:37:49 · 1980 阅读 · 0 评论 -
解密QQ号----啊哈算法
//// Created by jal on 18-9-2.//#include <bits/stdc++.h>using namespace std;int main() { list<int>li = {6,3,1,7,5,8,9,2,4}; vector<int>v; while(li.size() > 0){...原创 2018-09-02 15:06:59 · 1954 阅读 · 1 评论 -
两种风格的快速排序 Quick Sort
啊哈算法中的quick_sort.cpp//// Created by jal on 18-9-2.//#include &lt;bits/stdc++.h&gt;using namespace std;void quick_sort(int*a, int left, int right){ if(left &gt; right){ return;...原创 2018-09-02 11:13:22 · 844 阅读 · 1 评论 -
nyist 237 游戏高手的烦恼(二分图最小覆盖==最大匹配---匈牙利算法)
游戏高手的烦恼(nyist 237)解题思路: 考点:二分图的最小覆盖 == 最大匹配 算法:匈牙利算法 题目分析:如果图上的第i行的第j列有敌人,则表示i与j有相连。求最少放多少个炸弹可以炸掉所有敌人,每个炸弹可以炸掉所在行或列的所有敌人,行和列可以看成二分图的左部和右部。即求选最少的点,其发出的边可以覆盖整个图,也就是求二分图的最小覆盖,最小覆盖在数值上等于最大匹...原创 2018-05-29 13:43:51 · 745 阅读 · 0 评论 -
nyist 230 彩色棒 (字典树+并查集+欧拉通路)
彩色棒 (nyist 230)解题思路: 考点 算法 数据结构:欧拉回路、并查集、字典树 这道题是一个很好的图论综合题,题目说的是求给出的m个棒子是否能够拼接成一个棒子,只有两个棒子的某一端颜色相同才能拼接。 1. 首先,我们要将输入的字符串转化为整型的数字,作为无向图的点,由于数据太大,所以不能用map,要用字典树来存储 2. 然后判断这个无向图是否连通,如果不连通...原创 2018-05-27 21:57:38 · 734 阅读 · 0 评论 -
nyist120 校园网络 (Tarjan算法 / 强连通分量)
校园网络(nyist 120)解题思路请看代码块中的注释~import java.util.Scanner;import java.util.Stack;import java.util.Vector;/**考点:强连通分量 * 考查算法:Tarjan算法 * 解析: * 本题需要求给定的有向图中有多少个强连通分量, * 然后将强连通分量缩点, * 最后求缩点后的有向无...原创 2018-05-22 13:39:51 · 814 阅读 · 0 评论 -
nyist 211 POJ3660 Cow Contest(传递闭包、Floyd算法)
Cow Contest (nyist 211)解题思路: 考点:传递闭包 考查算法:Floyd算法 题目大意:有n头牛,有m条关系,每条关系指出了第一头牛能战胜第二头牛,这种战胜关系具有传递性。比如说A战胜B,B战胜C,则A战胜C 求有多少头牛的成绩能被确定。 解题关键:如果某头牛能战胜的数目与能战胜它的数目相加之和等于n-1,则说明该头牛的成绩能被确定...原创 2018-05-25 20:00:19 · 783 阅读 · 0 评论 -
POJ3615(Cow Hurdles)图论-Floyd算法JAVA高速IO外挂!
POJ3615(Cow Hurdles)图论-Floyd算法JAVA高速IO外挂!package classical_algorithm.graph.FloydWarshall;//http://poj.org/problem?id=3615/** * Created by jal on 2018/4/13 0013. */import static java.util....原创 2018-04-13 22:08:35 · 827 阅读 · 0 评论 -
Tarjan三大算法
Robert Endre Tarjan是一个美国计算机学家,他传奇的一生中发明了无数算法,统称为Tarjan算法。其中最著名的有三个,分别用来求解 1)有向图的强连通分量 2) 无向图的双联通分量 3) 最近公共祖先问题 一:有向图的强连通分量算法介绍(摘自百度百科) 如果两个顶点可以相互通达,则称两个顶点强连通(strongly connected)。如...原创 2018-03-31 21:25:36 · 3516 阅读 · 0 评论 -
欧拉函数
欧拉函数在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。此函数以其首名研究者欧拉命名(Euler’so totient function),它又称为Euler’s totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和8互质。 从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明。函数内容通...原创 2018-02-19 21:47:55 · 717 阅读 · 0 评论 -
Java/C++实现快速傅里叶变换(FFT)
快速傅里叶变换不是一种新的变换,而是傅里叶变换的一种快速算法,这个算法可以将普通的离散傅里叶变换(DFT)的时间复杂度O(n*n)降到O(n log n),大大提高了傅里叶变换的速度。快速傅里叶变换算法的提出,使傅里叶变换在通信领域得到了极大地运用和发展。 在ACM中,快速傅里叶变换通常用于大数的乘法。当两个数大到连JAVA的BI都无法承受时,就该使用快速傅里叶算法了。该算法是将...原创 2017-12-09 20:09:51 · 4740 阅读 · 0 评论 -
字符串匹配的KMP算法
我一直感觉KMP算法好难好难哦,很久很久之前我就看到这个算法了,看了好久都没看懂,今天突然心血来潮又想回顾一下这个难难的算法,然而,看了五六个小时,依然晕乎乎,似懂非懂。不过我发现有几篇关于KMP的文章确实写的不错,值得转载。点击查看原文//查找第一个匹配的子串的位置public class KMP { public static void main(String...转载 2017-12-20 21:02:05 · 734 阅读 · 0 评论 -
回文串----啊哈算法
//// Created by jal on 18-9-2.//#include <bits/stdc++.h>using namespace std;bool f(string s){ stack<char> stk; int len = s.size(); int mid = len/2; for(int i = 0; i...原创 2018-09-02 15:30:35 · 708 阅读 · 0 评论