自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

偏离的定弦

过去的曾经是流动的云朵!

  • 博客(54)
  • 问答 (8)
  • 收藏
  • 关注

原创 31. Next Permutation

Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.If such arrangement is not possible, it must rearrange it as the lowest possible orde

2016-06-22 14:52:17 433

原创 跳表Java实现

跳跃表是一种随机化数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间),并且对并发算法友好。 跳跃表的应用 Skip list(跳表)是一种可以代替平衡树的数据结构,默认是按照Key值升序的。Skip list让已排序的数据分布在多层链表中,以0-1随机数决定一个数据的向上攀升与否,通过“空间来换取时间”的一个算法,在每个节点中增加了向前的指针,在插入

2016-05-26 20:13:10 5719 5

原创 Java中定义和声明的区别

Java中最基本的就是定义变量和声明变量。 定义和声明的区别: 声明是向编译器介绍名字-标识符。它告诉编译器这个函数或变量在某处可以找到,它的模样像什么。而定义是说:“在这里建立变量”或“在这里建立函数”。它为名字分配存储空间。无论定义的是函数还是变量,编译器都要为他们在定义点分配存储空间。对于变量,编译器确定变量的大小,然后在内存中开辟空间来保存数据,对于函数,编译器会生产代码,这些代码

2016-05-22 16:50:31 7674 3

原创 Leetcode 112. Path Sum

package com.gloomy.leetcode;/** * Given a binary tree and a sum, determine if the tree has a root-to-leaf path * such that adding up all the values along the path equals the given sum. * * @au

2016-05-03 20:31:47 323

原创 LeetCode 13. Roman to Integer

package com.gloomy.leetcode;import java.util.HashMap;/** * 罗马数字转换为阿拉伯数字 * * @author 52sqz 罗马数字是阿拉伯数字传入之前使用的一种数码 * 。罗马数字采用七个罗马字母作数字,即Ⅰ(1)、X(10)、C(100)、M(1000 * )、V(5)、L(50)、D(500)M

2016-05-02 01:02:33 292

原创 LeetCode 242. Valid Anagram

package com.gloomy.leetcode;/** * Given two strings s and t, write a function to determine if t is an anagram * of s. * * For example, s = “anagram”, t = “nagaram”, return true. s = “rat”, t =

2016-05-01 23:59:54 229

原创 LeetCode 104. Maximum Depth of Binary Tree

package com.gloomy.leetcode;import java.util.ArrayDeque; import java.util.Queue;/** * 题目描述 * * Given a binary tree, find its minimum depth.The minimum depth is the number * of nodes along the

2016-05-01 23:57:53 245

原创 LeetCode 217. Contains Duplicate

package com.gloomy.leetcode;/** * Given an array of integers, find if the array contains any duplicates. Your * function should return true if any value appears at least twice in the array, * and it

2016-05-01 23:55:55 313

原创 红黑树java实现

红黑树(英语:Red–black tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由鲁道夫·贝尔发明的,他称之为”对称二叉B树”,它现代的名字是在Leo J. Guibas和Robert Sedgewick于1978年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的:它可以在O(log n)时

2016-05-01 22:53:26 4221

原创 平衡二叉树-Java

AVL是最先发明的自平衡二叉查找树算法。在AVL中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡树,n个结点的AVL树最大深度约1.44log2n。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。package com.gloomy.Tree;import java.util.ArrayDeque;import ja

2016-04-27 23:32:50 631

原创 二叉排序树-Java实现

二叉排序树(BinarySortTree),又称二叉查找树、二叉搜索树。它或者是一棵空树;或者是具有下列性质的二叉树:若左子树不空,则左子树上所有结点的值均小于它的根结点的值;若右子树不空,则右子树上所有结点的值均大于它的根结点的值;左、右子树也分别为二叉排序树。若子树为空,查找不成功。 package com.gloomy.Tree;import java.util.ArrayDeque;im

2016-04-25 15:21:50 347

原创 最小生成树-Kruskal算法

kruskal算法即克鲁斯卡尔算法,指求加权连通图的最小生成树的算法。kruskal算法总共选择n- 1条边,所使用的贪婪准则是:从剩下的边中选择一条不会产生环路的具有最小耗费的边加入已选择的边的集合中。注意到所选取的边若产生环路则不可能形成一棵生成树。kruskal算法分e步,其中e是网络中边的数目。按耗费递增的顺序来考虑这e条边,每次考虑一条边。当考虑某条边时,若将其加入到已选边的集合中会出现环

2016-04-24 14:41:47 413

原创 最小生成树算法-Prim算法

MST(Minimum Spanning Tree,最小生成树)问题有两种通用的解法,Prim算法就是其中之一,它是从点的方面考虑构建一颗MST,大致思想是:设图G顶点集合为U,首先任意选择图G中的一点作为起始点a,将该点加入集合V,再从集合U-V中找到另一点b使得点b到V中任意一点的权值最小,此时将b点也加入集合V;以此类推,现在的集合V={a,b},再从集合U-V中找到另一点c使得点c到V中任意

2016-04-23 17:43:43 566

原创 Bellman-Ford算法

Bellman-ford算法是求含负权图的单源最短路径算法,效率很低,但代码很容易写。即进行持续地松弛(原文是这么写的,为什么要叫松弛,争议很大),每次松弛把每条边都更新一下,若n-1次松弛后还能更新,则说明图中有负环,无法得出结果,否则就成功完成。Bellman-ford算法有一个小优化:每次松弛先设一个标识flag,初值为FALSE,若有边更新则赋值为TRUE,最终如果还是FALSE则直接成功退

2016-04-23 15:36:46 419

原创 最短路径算法

在日常生活中,我们如果需要常常往返A地区和B地区之间,我们最希望知道的可能是从A地区到B地区间的众多路径中,那一条路径的路途最短。最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。 算法具体的形式包括: (1)确定起点的最短路径问题:即已知起始结点,求最短路径的问题。 (2)确定终点的最短路径问题:与确定起点的问题相反,该问题是已知终结结点

2016-04-22 16:39:56 578

原创 无权最短路径

问题的描述是这样的:有一个有向无权图G,指定一个特定的顶点s作为起点,要求找出从s出发到G中的每一个其它顶点的最短路径。 package com.gloomy.graph;import java.util.ArrayDeque;import java.util.ArrayList;import java.util.List;import java.util.Queue;/** * 无权最

2016-04-21 22:02:10 481

原创 拓扑排序

拓扑排序: 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。

2016-04-21 13:36:47 517

原创 字符串变形

题目描述: 对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形。首先这个字符串中包含着一些空格,就像”Hello World”一样,然后我们要做的是把着个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。比如”Hello World”变形后就变成了”wORLD hELLO”。/** * * @author 过路的守望 * */public class T

2016-04-20 17:11:47 515

原创 二叉树递归及非递归遍历

import java.util.LinkedList;import java.util.Queue;import java.util.Stack;/** * 二叉树递归及非递归遍历 * * @author 过路的守望 * */public class BinaryTree { public static void main(String[] args) {

2016-04-18 23:13:08 248

原创 链表翻转

题目描述:输入一个链表,反转链表后,输出链表的所有元素。/** * 翻转链表 * * @author 过路的守望 * */public class ReverseList { /* * 非递归链表翻转 */ public ListNode reverseList(ListNode head) { /* * 如果链表为空

2016-04-18 22:07:11 288

原创 迷宫问题

定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0,}; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着

2016-04-17 19:42:49 506

原创 机器人的运动范围

题目描述 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?public class Solution {

2016-04-17 16:23:00 170

原创 滑动窗口的最大值

题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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

2016-04-17 15:09:36 366

原创 数据流中的中位数

题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 解题思路: 用两个堆,一个大顶堆,一个小顶堆来过滤数据。import java.util.ArrayList;import java.util.Comparator;/** * 数据流中的中位数

2016-04-17 13:51:42 358

原创 矩阵中的路径

题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,因为字符串的第一个字符b占据

2016-04-16 22:24:49 215

原创 二叉搜索树的第k个结点

题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。import java.util.Stack;/** * 中序遍历寻找第k小的数 * * @author 过路的守望 * */public class InOrderTraversal { /* * 二叉树的中序遍历

2016-04-16 17:51:45 379

原创 序列化二叉树

题目描述 请实现两个函数,分别用来序列化和反序列化二叉树。/** * 序列化与反序列化二叉树 * * @author 过路的守望 * */public class SerializeTree { public String Serialize(TreeNode root){ StringBuilder sb = new StringBuilder();

2016-04-16 17:05:55 188

原创 表示数值的字符串

题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。import java.util.regex.Pattern;/** * 表示数值的字符串 * @author 过路的守望 * */

2016-04-16 15:43:42 232

原创 正则表达式匹配

题目描述 请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配。/** * 字符串正则匹配 * * @author 过路的守望 * */publi

2016-04-16 14:01:52 255

原创 链表中环的入口结点

题目描述 一个链表中包含环,请找出该链表的环的入口结点。/** * 链表中环的入口节点 * * @author 过路的守望 * */public class EntryNodeOfLoop { public ListNode getEntryNodeOfLoop(ListNode head) { if (head == null || head.next ==

2016-04-15 22:22:13 201

原创 扑克牌顺子

题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…..LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上

2016-04-15 20:52:45 414

原创 删除链表中重复的结点

题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。/** * 删除链表中重复的结点 * * @author 过路的守望 * */public class DuplicationNode { public ListNode deleteDuplic

2016-04-15 20:17:54 311

原创 二叉树的下一个结点

题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。/** * 二叉树的下一个结点 * * @author 过路的守望 * */public class GetNextNode { public TreeLinkNode getNext(TreeLinkNode node) {

2016-04-15 17:23:16 225

原创 对称的二叉树

题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/** * 对称的二叉树 * * @author 过路的守望 * */public class SymmetricalTree { public boolean isSymmetricalTree(TreeNode pRoot) { if (p

2016-04-15 16:11:43 311

原创 构建乘积数组

题目描述 给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…A[i-1]*A[i+1]…*A[n-1]。不能使用除法。/** * 构建乘积数组 * @author 过路的守望 * */public class MultiplyArray { public static void main(String[] ar

2016-04-14 22:45:07 181

原创 整数中1出现的次数(从1到n整数中1出现的次数)

题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。/** * 从1到n中1出现的次数,可扩展为从1到n中x出现的次数。[1<=x<=9] * @autho

2016-04-14 20:28:36 217

原创 把数组排成最小的数

题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。/** * 把数组排成最小的数 * @author 过路的守望 * */import java.util.Arrays;import java.util.Comparator;public class

2016-04-14 12:06:10 197

原创 数组中的逆序对

题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。/** * 数组中逆序队 * * @author 过路的守望 * */public class InversePairs { public static void main(String[] args) { int[] arra

2016-04-13 23:12:18 167

原创 二叉树中和为某一值的路径

题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。import java.util.ArrayList;import java.util.Stack;/** * 二叉树中和为某一值的路径 * * @author 过路的守望 * */public class FindPath {

2016-04-13 18:42:17 155

原创 字符串的排列

题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。import java.util.ArrayList;import java.util.Stack;

2016-04-13 14:56:53 141

空空如也

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

TA关注的人

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