自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (1)
  • 收藏
  • 关注

原创 leetcode13 Roman to Integer

这个题目是把罗马数字转换为整数,比如输入字符串 MCMLXXXIV,输出为整数1984。观测罗马数字的规律,我们得到,其实可以直接相加每个字符代表的整数即可,比如CLIII这个罗马数字对应的整数即为100+50+1+1+1=153。但是,若是两个字符代表一个数字时,我们就需要注意了,比如IV即为5-1=4。因此,我们得到规律,没读入字符串的一个字符,都将它与之后一个字符代表的数字比较,如果前者较小

2015-01-27 19:56:13 456

原创 leetcode12 Integer to Roman

这个题目是把1~3999之间的整数转换为罗马数字。首先列举一下几个基本的罗马数字,1---I,5---V,10---X,50---L,100---C,500---D,1000---M。其他的罗马数字都是由这几个组成的。一个较小的单位连在较大单位前面,表示后面的减去前面的,比如CM即为900,XL即为40。我自己写了一个方法,但是比较笨拙,如下所示:在网上看了看别人的代码,写的都很好,而

2015-01-27 19:47:13 569

原创 leetcode7 Reverse Integer

题目要求,输入一个整型数,输出反转后的数。例如:-123,反转后为-321。应该考虑到输入int型的数反转后超过int最大值的情况。public class ReverseInteger { public static void main(String[] args) { int x=-123; ReverseInteger ri=new ReverseInteger();

2015-01-14 21:27:04 429

原创 leetcode6 Zigzag Conversion

题目要求:The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)P A H NA

2015-01-13 17:34:07 537

原创 leetcode5 Longest Palindromic Substring

求一个字符串的最长回文子串。回文子串分为两种,一种是aba型的,一种是abba型的,因此两种情况都有考虑到。用一个循环,对字符串中的每一个字符作为中心进行判断,并记录下每个循环后的最长子串。时间复杂度为O(n*n)之前写了一个程序可以运行,但是在leetcode中运行超时了。下面的是修改别人的程序,很精简。public class LongestPalindromicSubstring

2015-01-13 16:06:05 454

原创 leetcode4 Median of two sorted arrays

找到两个已排序数组的中间值,如输入{2,3,5},{4,6},输出4,若输入{2,3,5},{4,6,8},则输出4.5。因为是两个已排序数组,我想到的是用归并排序的思想,排序后数组中间的那个数,或中间两个数的平均数即为所求的median。public class MedianOfSortedArrays { public static void main(String[] args)

2015-01-12 16:09:35 418

原创 leetcode3 Longest substring whitout repeat characters

求字符串中的最长无重复子串的长度,例如"abcabcbb",最长无重复子串为"abc",长度为3。因为要求无重复,因此想到要用HashMap来保存,因为HashMap的键值不能重复。将要存入的字符作为key,字符在字符串中的下标作为value,如果map中已经存有该字符,则删掉该字符以及字符串中该字符之前的所有字符,然后再存入。例如字符串为"abcbd",如已存入abc,现在要存b,则删掉ab,存

2015-01-12 10:46:02 416

原创 leetcode2 add two numbers

题目为把两个非负整数逆序存储在链表中,求和并返回一个链表。例如:234+126=360,在这个题目中即为输入:4-->3-->2       6-->2-->1输出:0-->6-->3public class AddTwoNumbers { public static void main(String[] args) { ListNode l1=new ListNode(4)

2015-01-11 20:31:47 589

原创 leetcode1 twosum

看见题目时我直接想到了两层for循环,实现方法如下:public int[] twoSum(int[] numbers, int target) { int indexs[]=new int[2]; for(int i=0;i<numbers.length-1;i++){ for(int j=i+1;j<numbe

2015-01-09 16:51:09 332

原创 无向网图的最小生成树---完整代码

前两篇只有算法部分,现在附上完整代码public class ShortPath { public static void main(String[] args) { MGraph mg=new MGraph(); mg.addVertex('A'); mg.addVertex('B'); mg.addVertex('C'); mg.addVert

2015-01-04 10:47:34 912

原创 无向网图的最短路径--Floyd算法

Floyd算法是求任意顶点A到任意顶点B的最短路径,对于任意的顶点A和B,最短路径可能直接到达,也可能经过其他的顶点到达,通过比较权值w[A][X]+w[x][B]和w[A][B],较小者即为最短路径。因此对于任意的顶点A,B,对所有的点进行循环,找出最短路径//PathMatrix[v][w] 保存任意顶点v到w的带权长度 //ShortPathTable[][] 保存路径 p

2015-01-04 10:43:59 1818

原创 无向网图的最短路径--Dijkstra算法

Dijkstra算法 是一个按长度递增的次序产生最短路径的算法。     假如我们从v0开始求最短路径,首先找到v0到v1的最短路径,当求v0到v2的最短路径时,要比较v0直接到v2的路径权值和v0通过v1到v2的权值,选择较小者为v0到v2的路径,依次类推,从而求得到最后一个点的最短路径//shortPath[] //保存最短路径 //parent[] //保存前驱结点

2015-01-04 10:33:47 857

原创 基于邻接矩阵存储的无向网图的创建,最小生成树算法实现完整代码

之前的几篇是分开按照创建及不同的算法写的,有点乱,也没有main函数,现在附上完整代码:#include #define MAXVEX 100#define INFINITY 65535typedef char VertexType;typedef int EdgeType;typedef struct { VertexType vexs[MAXV

2014-12-26 09:19:57 2561

原创 无向网图的最小生成树算法--克鲁斯卡尔算法

与普里姆算法不同的是,克鲁斯卡尔算法是从边的角度出发构造最小生成树的,将所有的边按照权值从小到大进行排序,然后依次加入最小生成树,但是加入时需要判断有没有构成环路,如果构成环路了就放弃这条边,接着考虑下一条边。定义一个边的结构体:typedef struct{ int begin; int end; int weight;}Edge;MGraph是定义的图的结

2014-12-26 09:06:47 1761

原创 无向网图的最小生成树--普里姆算法

普里姆算法是从顶点的角度考虑来构造最小生成树。假定u0为初始顶点,将其加入到生成树的顶点集合U中 ,从u0出发,选择与它关联的具有最小权值的边(u0, v),将顶点v加入到生成树的顶点集合U中。以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(u, v),把该边加入到生成树的边集TE中,把它的顶点加入到集合U中。如此重复执行,直到网络中的所有顶点都加入到生成树顶点集合

2014-12-25 22:13:56 2414

原创 无向网图的邻接表存储结构

在邻接矩阵的存储结构中,当边比较少的时候,这种结构很浪费存储空间,因此我们考虑用链表来代替二维矩阵存储边的信息,顶点信息还是用一维数组表示。此时,我们的顶点信息不只是自己的名称等,还要指向自己的第一个边。边表结点包括三个部分,邻接点域存放下标,权值域,存放指向改点的边的权值,链域,指向下一个结点。typedef char VertexType;typedef int EdgeTyp

2014-12-25 22:10:49 5165

原创 无向网图的邻接矩阵存储结构

1、图的邻接矩阵存储结构是用两个数组表示,一个一维数组存储图中的顶点信息,一个二维数组存储图中边的信息。我们规定顶点与自身的边的权值为0,因此,二维矩阵中对角线上的值全为0.顶点i与顶点j之间有边,则二维数组中a[i][j]=weight,顶点i与顶点j之间没有边,则二维数组中a[i][j]=无穷大。用65535来表示无穷大#define INFINITY 65535定义一个图的结构体

2014-12-25 21:21:47 2530 1

原创 java实现马踏棋盘问题

马踏棋盘问题:将马随机放在国际象棋的8×8棋盘chese[0~7][0~7]的某个方格中,马按走棋规则进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格。编制程序,求出马的行走路线,并按求出的行走路线,将数字1,2,…,64依次填入一个8×8的方阵,输出之。将棋盘长和宽定义为常量,方便测试时修改:private final int X=8;private final int Y

2014-12-22 21:20:12 2477

原创 二叉树的建立中指向指针的指针的运用

刚开始学C语言,对指针不是很了解,这两天看《大话数据结构》中二叉树的建立那里,运用了指向指针的指针,迷茫了一天,现在终于有了一点点思路,赶紧记录下来。在网上查了一句话:如果希望在一个函数的参数中改变一个指针的值,只能传这个指针的指针给这个函数。我理解的意思就是,如果我们调用函数时传入一个指针参数,我们在这个函数中不能修改这个指针的值,只能修改这个指针指向的内容,如果想要修改它的值,就必须把这个指针

2014-12-18 16:25:39 3171 1

数据结构1800题

总结了数据结构的所有考题,很多都是高校的考试题,很适合复习考试,笔试等

2014-12-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除