
刷题
Brand_new_Future
努力在新的梦想的道路上。/Work hard in the way of new dream.
展开
-
将正方形矩阵顺时针转动90度
题目:给定一个NxN的矩阵matrix,把这个矩阵调整成顺时针转动90度后的形式。例如:1 2 3 45 6 7 89 10 11 1213 14 15 16顺时针转动90度13 9 5 114 10 6 215 11 7 316 12 8 4思路:此题可以采用分解矩阵的思路解决。首先是矩阵的外围即:1 2 3 45 ...原创 2018-02-08 16:04:59 · 846 阅读 · 0 评论 -
LeetCode——Max Points on a Line
题目:Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.题目大意:给出一组点,求在同一条直线上的点的最大数。思路:首先记录下重合的点的数目,和斜率不存在时,处于同一条直线上的点的数目。之后使用HashMap数据结构来存储和这个点各个斜率上点的个数。统计完原创 2017-11-01 15:23:05 · 271 阅读 · 0 评论 -
剑指offer-62题 二叉排序树第k个节点
题目描述: 给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。 思路: 二叉搜索树的中序遍历其实就是其中各个节点按照从小到大的顺序进行排序。因此可以考虑使用二叉树中序遍历的方法来解此题。详细可参考二叉树中序遍历的递归与非递归写法。二叉树的中序遍历分为递归与非递归两种方式。无论采用哪种方式都需要设置好一原创 2017-10-23 18:14:26 · 592 阅读 · 0 评论 -
poj 1979
dfs算法附上代码:#include#include#define N 20+10int w,h,I,J;char s[N][N];int vis[N][N];int mov[4][2]={{0,1},{1,0},{0,-1},{-1,0}};void dfs(int x,int y){ int i,j,k,tx,ty; vis[x][y]=1; f原创 2014-12-04 17:17:13 · 578 阅读 · 0 评论 -
poj 1562
还是DFS#include#include#define N 100+10int n,m;int mov[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};int vis[N][N];char s[N][N];void dfs(int x,int y){ int i,tx,ty; s[x]原创 2014-12-04 19:00:41 · 497 阅读 · 0 评论 -
poj 1111
dfs方法感觉有些死板,但还是通过自己的努力做了出来,思路很清晰。附上代码:#include#include#define N 20+10int n,m,p,q;int counter;char s[N][N];int vis[N][N];int mov[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}}原创 2014-12-04 20:46:13 · 582 阅读 · 0 评论 -
poj 1915
栈或者是队列要开的大一些,之前开小了,总是Runtime error.单独设置一个距离函数,用于保存步数,最先找到的肯定是最小的。附上代码:#include#include#define N 300int x1,x2,x3,x4,m;int front,rear;int mov[8][2]={{1,2},{2,1},{2,-1},{1,-2},{-1,-2},{-2,-1}原创 2014-12-06 17:00:16 · 485 阅读 · 0 评论 -
UVA10010
//#define LOCAL#include #include #define MAXN 50 + 10char letters[MAXN][MAXN];bool isVisited[MAXN][MAXN];struct Node{ int x; int y;} node;void findChar(char转载 2014-11-03 20:53:22 · 581 阅读 · 0 评论 -
uva 10361
#include#includeconst int maxn=120;int main(){ int i,j,k,n,m,l; char s1[maxn],s2[maxn],s3[maxn],s4[maxn],s5[maxn],c[maxn]; char ch; freopen("D:\\in.txt","r",stdin); sc转载 2014-11-06 09:36:09 · 490 阅读 · 0 评论 -
UVA 10878
Your boss has just unearthed a roll of old computer tapes. The tapes have holes in them and might contain some sort of useful information. It falls to you to figure out what is written on them.Inp转载 2014-11-08 17:08:16 · 705 阅读 · 0 评论 -
UVA 10815
把小白书的5.3.字母重排搞懂了,这道题基本没问题。主要考查字符比较函数和字符串比较原创 2014-11-08 21:18:21 · 434 阅读 · 0 评论 -
UVA 10115
解此题不易,共用了我3个小时。学到了一个重要算法:字符串交换。原创 2014-11-10 19:57:51 · 497 阅读 · 0 评论 -
剑指offer-63题 数据流的中位数
题目: 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 思路: 定义两个优先队列即PriorityQueue,一个作为大顶堆另一个作为小顶堆。这里需要说明下自己最近对于堆的理解,以前一直以为堆和集合一样是一群无序的数据,但是自从做了这道题之后开始有了对堆更原创 2017-10-25 16:18:07 · 289 阅读 · 0 评论 -
最长递增子序列
题目:给定数组arr,返回arr的最长递增子序列。 举例: arr=[2,1,5,3,6,4,8,9,7],返回的最长递增子序列为[1,3,4,9,8]。思路:采取两层循环来遍历数组arr,第一层循环遍历完一个数之后,在第二层循环中以第一层循环中的这个数为第一个数向左进行循环寻找比第一层循环中小的数,并取出这个数的长度并加一。这里需要用到一个判断公式:dp[i] = max(dp[i],dp[j原创 2017-11-12 21:00:46 · 315 阅读 · 0 评论 -
汉诺塔问题
题目:给定一个整数n,代表汉诺塔游戏中从小到大放置的n个圆盘,假设开始时所有的圆盘都放在左边的柱子上,想按照汉诺塔游戏的要求把所有的圆盘都移到右边的柱子上。实现函数打印最有轨迹。思路:此题可以采用递归的思想来解决,首先设有三个柱子分别设为left,mid,right,另外有n个圆盘,现将1~n-1个圆盘从left移动到mid上,之后再将第n个圆盘从left上移动到right上,最后将mid上的1~n原创 2017-11-17 22:25:14 · 324 阅读 · 0 评论 -
最长的可整合的子数组的长度
题目:先给出可整合数组的定义。如果一个数组在排序后,每相邻的两个数差的绝对值都为1,则该数组为可整合数组。例如,[5,3,4,6,2]排序之后为[2,3,4,5,6],符合每相邻的两个数差的绝对值为1,所以这个数组为可整合数组。给定一个整形数组arr,请返回其中最大的可整合数组的长度。例如,[5,5,3,2,6,4,3]的最大可整合数组为[5,3,2,6,4],所以返回5.思路:最大整合数组有一个...原创 2018-02-15 14:52:22 · 393 阅读 · 0 评论 -
在其它数都出现k次的数组中找到只出现一次的数
题目:给定一个整形数组arr和一个大于1的整数k。已知arr中只有1个数出现了1次,其他的数都出现了k次,请返回只出现1次的数。思路:根据该题的数组中很多数出现了k次只有一个数出现了1次。可以采用如下的步骤解决此题。将数组中所有的数都转换为k进制的形式。所有的数依次相加取余。最终的结果为只出现一次的数。为何将所有的数相加并取余后得到的结果就是只出现1次的书。设x为出现了原创 2018-02-07 17:21:22 · 540 阅读 · 0 评论 -
在其他数都出现偶数次的数组中找到出现奇数次的数
题目:给定一个整形数组arr,其中只有一个数出现了奇数次,其他数都出现了偶数次,打印这个数。要求时间复杂度为O(n),额外空间复杂度为O(1)。思路:此题可以采用异或的思想解决。异或满足交换律。假设有一个数组arr = {4,6,3,2,4,3,6,6,6}4⊕6⊕3⊕2⊕4⊕3⊕6⊕6⊕6 = 4⊕4⊕3⊕3⊕6⊕6⊕6⊕6⊕2众所周知同样的数异或之后为0,不原创 2018-02-06 17:41:45 · 443 阅读 · 0 评论 -
整数的二进制表达中有多少个1
题目:给定一个32位的整数n,可为0,可为正,也可为负,返回该整数二进制表达中1的个数。思路:最简单的做法就是求出一个整数如何得到它的二进制数。以整数5为例。用5除以2,取余的结果为1时代表二进制表达中含有一个1,此时的被除数变为5/2。循环直到被除数为0,循环结束。注意:负数的二进制表示的首位为1.在计数之前需要判断n的正负。代码:/** * 整数二进制中有多少原创 2018-02-05 17:15:50 · 779 阅读 · 0 评论 -
只用位运算不用算数运算求两个数的加减
题目:给定两个32位整数a和b,可正、可负、可0.不能使用算数运算符,分别实现a与b的加减运算。思路:两个数的相加实际上就是在二进制位上的抑或、与、移位等操作。两个数抑或表示两个数无进位的相加,两个数与再向左移动一位代表着两个数相加产生的进位。以9+3为例:代码:/** * 不使用运算符号实现运算 */ public int addNoAlph原创 2018-02-04 20:45:15 · 467 阅读 · 0 评论 -
回文最少分割数
题目:给定一个字符串str,返回把str全部切割为回文子串的最小分割数。思路:该题可以使用动态规划的思想来解决。首先要明确好dp[i]的概念,即从str的首个位置开始到第i个位置要切割为回文子串的最小分割数。最后的dp[str.length()-1]就是题目的结果。要求出dp[i]的值就需要遍历数组str(0~i),假设0~i之间的某个值j,char[j] == char[i]。在原创 2018-02-01 20:38:45 · 486 阅读 · 0 评论 -
判断字符数组中是否所有的字符都只出现过一次
题目:给定一个字符类型的数组chas[],判断chas中是否所有的字符都只出现过一次,请根据以下两种要求实现函数。时间复杂度为O(N)。额外空间复杂度为O(1)。思路:遍历字符串时,每遍历一个字符的时候创建一个新的字符串使用replace函数将遍历到的字符替换为空字符在赋值给新建的字符。将原先的字符长度与新建的字符长度做减法,一旦大于或等于2则判断原字符中存在重复的字符。代码: /**原创 2018-01-16 20:57:09 · 437 阅读 · 0 评论 -
翻转字符串
题目:给定一个字符类型的数组chas和一个整数size,请把大小为size的左半区整体移动到右半区,右半区整体移到左边。举例:如果把chas看做字符串“ABCDE”,size=3,调整成“DEABC”。思路:首先判断该字符串左右移动的距离,取最小的哪一个。举例“1234567ABCD”。需要移动的size是7.即将1234567移动到ABCD的右边变为“ABCD1234567”原创 2018-01-21 11:16:29 · 336 阅读 · 0 评论 -
最长公共子串问题
题目:给定两个字符串str1和str2,返回两个字符串的最长公共子串。要求时间复杂度为O(M*N),额外空间复杂度为O(1)的方法。思路:一开始想用KMP算法解决此题,但是众所周知KMp算法需要next数组,那么空间复杂度肯定是O(n)了。后来想到了递归的方法。刚好满足题目的要求。解题代码:public String theLongest(String str1,String str2){原创 2017-11-21 21:20:34 · 305 阅读 · 0 评论 -
最长公共子序列的问题
题目:给定两个字符串str1和str2,返回两个字符串的最长公共子序列。 举例str1=”1A2C3D4B56”,str=“B1D23CA45B6A”。123456或者12C4B6都是最长公共子序列,返回哪一个都行。思路:此题可以采用动态规划的思想来解。首先要构造一个矩阵Matrix[str1.length()][str2.length()]。以str1为行,str2为列。之后构造数组dp[str原创 2017-11-21 15:52:14 · 522 阅读 · 0 评论 -
汉诺塔问题进阶
题目:给定一个整形数组arr,其中只含有1、2和3,代表所有圆盘目前的状态。1代表左柱,2代表中柱,3代表右柱,arr[i]代表第i+1个圆盘的位置。比如,arr=[3,3,2,1],代表第一个盘子在右柱上,第二个盘子在右柱上,第三个圆盘在中柱上,第四个圆盘在左柱上。如果arr代表的状态是最优移动轨迹过程中出现的状态,返回arr这种状态是最优移动轨迹中的第几个状态。如果arr代表的状态不是最优移动轨原创 2017-11-18 21:26:37 · 612 阅读 · 0 评论 -
UVA 465
此题主要运用到了atof()函数,但注意是double型的。#include#include#define N 10000#define max 2147483647int main(){ int i,j,k,n,m; char s1[N],s2[N],c; double a,b; while(scanf("%s %c %s",s1,原创 2014-11-12 14:58:14 · 489 阅读 · 0 评论 -
ACM题集以及各种总结大全!
ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正。 一.ACM入门 关于ACM 百度百科连接 杭州电子科技大学(hdu)ACM题目 连接转载 2014-12-07 19:38:02 · 557 阅读 · 0 评论 -
杭电 bestcoder#18 Bits Problem
Problem DescriptionIf the quantity of '1' in a number's binary digits is n, we call this number a n-onebit number. For instance, 8(1000) is a 1-onebit number, and 5(101) is a 2-onebit number. Now转载 2014-11-16 15:20:29 · 584 阅读 · 0 评论 -
杭电 1070
附上代码:#include#include#define N 110int main(){ int i,j,k,n,m,t,ave,min; char name[N],s[N]; int price,volume,days,v; while(scanf("%d",&t)==1) { while(t--) {原创 2014-12-02 20:56:58 · 714 阅读 · 0 评论 -
杭电2818
参考了网上某些大神的思路,之后自己独立写了出来。首先要把题读懂,这是关键。计算的是x下面的箱子的数量,用up,down数组分别表示x上面盒子的数量和下面盒子的数量。利于此题的解答。附上代码:#includeconst int N=30000+10;int a[N],up[N],down[N];int n,m;void makeset(){ int i; f原创 2014-12-18 21:48:05 · 526 阅读 · 0 评论 -
杭电 1016
#include#include#include#define N 21int a[N],b[N],vis[N];int n;int prime(int t){ int i,j,k; if(t==2) return 1; k=t/2+1; for(i=2;i<k;i++) { if(t%i==0)原创 2014-12-08 16:36:10 · 618 阅读 · 0 评论 -
杭电 1233
水题Kruskal算法附上代码:#include#include#include#includeusing namespace std;const int N=10000;int b[N];struct node{ int x; int y; int dis;}text[N*N];bool comp(const node x,const no原创 2014-12-22 20:18:14 · 760 阅读 · 0 评论 -
杭电 1162
最小生成树:Kraskul算法设a[N],a2[N]数组,a[N]用于保存源节点,a2[N]用于保存父节点。并查集用于判断是否构成回路:int findl(int x){ if(x!=a2[x]) a2[x]=findl(a2[x]); return a2[x];}附上代码:#include#include#include#incl原创 2014-12-20 22:07:07 · 576 阅读 · 0 评论 -
杭电 1863
kruskal算法,水题飘过。。。附上代码:#include#include#includeusing namespace std;#define N 1000int n,m;int a[N],b[N];struct node{ int x; int y; int dis;}text[N];int comp(const node a,const原创 2014-12-27 20:34:42 · 712 阅读 · 0 评论 -
最少货币数问题
题目:给定数组arr, arr中所有的值都为正数且不重复。每个值代表一中面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数。思路 :采用动态规划的思想来解此题。首先设定dp[i][j]数组,i的意思是当前的最大货币数,j的意思是目标货币数。因此dp[i][j]的意思就是使用最大货币i可以组成货币j的最少货币数。假设现在有{10,5,2,1}的货币,原创 2017-11-06 19:59:05 · 835 阅读 · 0 评论 -
剑指offer-66题 机器人的运动范围
题目: 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路: 此题的思路和上一道题很像,都用到了DF原创 2017-10-28 12:43:32 · 266 阅读 · 0 评论 -
匈牙利算法
这是一种用增广路求二分图最大匹配的算法。它由匈牙利数学家Edmonds于1965年提出,因而得名。 定义 未盖点:设Vi是图G的一个顶点,如果Vi 不与任意一条属于匹配M的边相关联,就称Vi 是一个未盖点。 交错路:设P是图G的一条路,如果P的任意两条相邻的边一定是一条属于M而另一条不属于M,就称P是一条交错路。可增广路:两个端点都是未盖点的交错路叫做可增广路。转载 2014-10-15 14:12:05 · 546 阅读 · 0 评论 -
剑指offer-65题 矩阵中的路径
题目: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为字符串的第一个字符b占据了原创 2017-10-27 16:31:51 · 279 阅读 · 0 评论 -
剑指offer-64题 滑动窗口的最大值
题目: 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,原创 2017-10-27 08:43:47 · 317 阅读 · 0 评论