自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(355)
  • 资源 (28)
  • 收藏
  • 关注

原创 LeetCode 解题

题目序列: 序号 标题 技术点 1 Two sum HashMap 2 Add two numbers 链表 3 Longest Substring Without Repeating Characters HashSet 4 Median of Two Sorted Arrays 5 6 7

2017-11-19 13:48:44 312

原创 LeetCode解题-#20-Valid Parentheses

题目描述: 给一个只包含”(“, “),”, “[“, “]”, “{“, “}” 的字符串,判断这个字符串是否有效(配对)。 比如: “()[]{}” 是有效的。 “([)]” 是无效的。思路: 让 3 种括号能有效的原则要依次配对,左开口的 3 种扩号是 :”(“, “[“, “{“, 右开口的 3 种扩号是 “)”, “]”, “}”, 要让左右都配对,那就必须保证右开口扩号

2017-11-19 13:23:44 249

原创 LeetCode解题-#53-Maximum subarray problem

题目描述: 找出一个 int 数组中的最大子数组的和。(数组长度 >= 1) 比如: [-2,1,-3,4,-1,2,1,-5,4] 的最大子数组是 [4,-1,2,1] 和是 6思路: 表面上这是一个最优化问题(optimization problem),可以试着用 DP 去解。DP 的第一步就是找出子问题: maxSubArray(int A[], int i, int

2017-11-19 00:15:46 256

原创 LeetCode解题-#14-Longest Common Prefix

题目描述: 找出一组字符串中的最长共同前缀。分析: 例如 abc, abd, ab,它们的最长共同前缀是 ab。思路: 学习过的 Trie 刚好能解决这个问题,虽然不会是最优解,但可以练练手。 Trie:http://blog.csdn.net/cuit/article/details/78495561先定义好 Trie 树 的数据结构: 这里用 HashMap(C#中是 Dictiona

2017-11-16 22:45:10 241

原创 LeetCode解题-#9-Palindrome Number

题目描述: 判断一个数字是否是回文,不可以用额外的空间。分析: 题目的初衷是不想答题者转换成字符串再判断是否是回文。可是即使不用字符串,也不可能完全做到不用额外的空间的,还不如直接明说了限制。 另外,负数,0 结尾的数字,是无论如何也不会成为回文的。思路: 可以先把数字逆序,再比较原数字和逆序后的数字是否相同,相同则是回文。 但是如果完全逆序则有可能导致overflow,所以只能逆序半截

2017-11-13 00:40:34 249

原创 LeetCode解题-#7-Reverse Integer

题目描述: 给一个32位有符号整数,按位反转。 如果溢出则返回0。 比如: Input: 123 Output: 321 Input: -123 Output: -321 Input: 120 Output: 21思路: 第一反应是转换成 string,再反转,但这肯定不是最高效的。 可以从右向左按位逐个取出数字,保存进一个新的数字。 比如: 12

2017-11-11 22:09:50 242

原创 LeetCode解题-#4-Median of Two Sorted Arrays

题目描述: 找出两个排序数组 nums1(长度为m), nums2(长度为n) 的中值。要求时间复杂度为O(logm+n)。 中值的定义:如果数组有偶数个,则中值是最中间两个数的平均值,如果数组有奇数个,则中值就是最中间那个数。 例1: nums1 = [1, 3] nums2 = [2] The median is 2.0 nums1 = [1, 2] nu

2017-11-11 14:24:50 318

原创 LeetCode解题-#3-Longest Substring Without Repeating Characters

题目描述: 给出一个字符串,找出最长不重复的子串(连续的)。比如: Given “abcabcbb“, the answer is “abc“, which the length is 3. Given “bbbbb“, the answer is “b“, with the length of 1. Given “pwwkew“, theanswer is “wke“, wi

2017-11-11 14:16:34 227

原创 LeetCode解题-#2-Add two numbers

题目描述: 有两个非空链表,分别表示一个非负整数,位数是逆序的,比如: 2->4->3 分别是个位,十位,百位。结果仍然是一个表示非负整数的链表。 Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8思路: 因为结果仍然是位数逆序的,所以只需要像加法运算一样,从左到右依次相加两个链表即可。要注意的是:两个链表位置不相等

2017-11-11 12:42:39 294

原创 LeetCode解题-#1-Two sum

题目描述: 给出一个数组 nums,找出其中两个和为 target 值的元素的索引,注意:有且只有一对值符合要求。如: Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].思路:第一反应会去暴力双重循环地判断 nums[0] + nums[i

2017-11-11 11:46:04 259

原创 LeetCode基础-字符串-Trie

Trie 来自单词 retrieval,发音为 try(避免与tree混淆),也叫做 单词查找树,或 字典树。 Trie 是树结构,除根结点外,每个结点都只会有一个父结点。每个结点都有 R 个子结点, R 是字母表的大小,而且可能含有大量的空结点。假设有字符串:“she sells sea shells by the sea shore”,可以保存成下面这样,让根结点为空:我们将每个 字符串 关联

2017-11-10 00:24:36 385

原创 LeetCode基础-图-有向图-Dijkstra算法(未完成)

Dijkstra 算法用于解决 边权重非负、加权有向图、单起点最短路径 问题。 Dijkstra 算法与在加权无向图中查找最小生成树的方法类似:每一步添加一个非树顶点到树中,直到所有顶点都在树中。

2017-11-09 22:11:03 969

原创 LeetCode基础-图-有向图-最短路径

最短路径:从图中的一个顶点到另一个顶点的成本最小的路径。 单点最短路径:在加权有向图中,给出一个起点 s,找到是否有一条到顶点 v 的路径,如果有,找出权重最小的那条。最短路径的性质:路径是有向的。权重不定表示距离。并不是所有顶点都是可达的。负权重会使问题变复杂。最短路径一般都是简单的(不含零权重边的环)。最短路径不定是唯一的。可能存在平行边和自环。平行边中权重最小的才会被选中。也

2017-11-09 09:07:52 7563

原创 LeetCode基础-图-最小生成树

加权图:为每条边关联一个权值或者说成本的图模型。 图的生成树:含有图的所有顶点的无环连通子图。 最小生成树:加权无向图的最小生成树(MST)是它的一棵权值最小(所有边的权值之和)的生成树。 下图是加权无向图与它的最小生成树。最小生成树有两个经典算法:Prim 算法Kruskal 算法如果一幅图是非连通的,则只能用这个算法计算所有连通分量的最小生成树,合并在一起叫做最小生成森林。还有几点要

2017-11-08 23:53:11 4843 1

原创 LeetCode基础-图-有向图-强连通性

在有向图中,如果两个顶点 v 和 w 是互相有向的,则称它们是强连通的。 在有向图中,如果任意两个顶点都是互相有向的,则称这幅图是强连通图。 所以有以下命题:任意顶点 v 和自身也是强连通的。如果 v 和 w 强连通的,则 w 和 v 也是强连通的。如果 v 和 w 强连通,w 和 x 强连通,则 v 和 x 也是强连通的。强连通性将所有顶点分成了一些平等的部分,每个部分都是由 相互为

2017-11-08 22:48:05 1266

原创 LeetCode基础-图-有向图-拓扑排序

**拓扑排序**拓扑排序:给一幅有向图,把所有的顶点排序,使所有的有向边都从 排在前面的顶点 指向排在后面的顶点。(或者证明不能做到,比如有环) 拓扑排序可以用来解决优先级调度的问题。(前后顶点有依赖关系) 比如下面的课程学习顺序:比如 任务x 必须在 任务y 之前完成, 任务y 必须在 任务z 之前完成,但 任务z 必须在 任务x 之前完成,这肯定是图中有环,这样就无法完成拓扑排序了。所有首先

2017-11-08 22:22:33 934

原创 LeetCode基础-图-有向图

在有向图中,边是单向的。**术语**:出度:在有向图中,一个顶点的出度为该顶点指出的边的总数。 入度:在有向图中,一个顶点的出度为指向该顶点的边的总数。 表示:用 v->w 来表示 一条由 v 指向 w 的边。v 与 w 也可能是双向的。类的代码:public class Digraph{ private final int V; private int E; priv

2017-11-08 09:15:11 923

原创 LeetCode基础-图-连通分量

在无向图G中,若从顶点 v 到顶点 w 有路径(当然从vj到vi也一定有路径),则称v和 w 是连通的。 若图 G 中任意两个不同的顶点 v 和 w 都连通(即有路径),则称G为连通图。 无向图 G 的极大连通子图称为 G 的最强连通分量。任何连通图的连通分量只有一个,即是其自身。非连通的无向图有多个连通分量。可以用 DFS 查找所有连通分量:class CC { private

2017-11-07 00:12:58 1960

原创 LeetCode基础-图-BFS

BFS:Breadth First Search,广度优先搜索。 当有这样一个问题:计算图中两点之间的最短距离时,需要广度优先搜索,BFS 也是很多图算法的基石。要找到顶点 s 到 顶点 v 的最短路径,从 s 开始,在所有距离 s 一条边的顶点中寻找 v,如果找不到,就继续在与 s 距离一条边的顶点中寻找 v,如此下去,走到找到 v。深度优先搜索就好像是一个人在走迷宫,而广度优先搜索就像是一组人

2017-11-06 23:42:32 470

原创 LeetCode基础-图-DFS

DFS:Depth First Search,深度优先搜索。走迷宫的过程:选择一条没有标记过的通道,在走过的路上铺一条绳子。标记所有你第一次路过的路口和通道。当到达一个标记过的路口时(用绳子)回退到上个路口。当回退到的路口已经没有可走的通道时继续回退。 绳子可以保证你总能找到一条出路,标记则能保证你不会两次经过同一条通道或同一个路口。深度优先遍历的具体实现思路是:用一个递归方法遍历所有顶

2017-11-05 22:59:09 574

原创 LeetCode基础-图-无向图

无向图:Undirected Graphs图由 边(Edge) 和 顶点(Vertex) 组成:一般用 0 到 V-1 来表示 V 个顶点组成的图中的各个顶点。 一般用 v-w 来表示连接顶点 v 到 顶点 w 的边。图相关术语特殊的图:自环:有一条边连接一个顶点和其自身。英文称作:self-loop。平行边:有两条边连接同样的同个顶点。英文称作:parallel。多重图:含有平行边的图

2017-11-05 14:44:34 2117

原创 LeetCode基础-图

图的定义: 由一组顶点(Vertex)和一组能够连接做任意两个顶点的边(Edge)的集合组成。图的应用:地图:比如两点之间的最短路径。网页信息:比如多个页面之间的引用关系。电路:元件之间的连接关系。任务调度:比如最少的时间完成有依赖关系的工序调度。商业交易:比如表示现金和商品在买卖双方之间的转移,以理解对市场的理解。配对:学生与各种社团之间的关系。一个学生可能参与多个社团。计算机网络

2017-11-05 13:36:28 371

原创 LeetCode--LRU Cache

LRU == Least Recently Used. LRU 的内部继承于 LinkedHashMap。LRUCache 将元素按照访问的先后顺序保存在一条双向链接中,并保存指向开头和结尾的指针。将元素作为key,元素在链接中的位置作为value 保存起来。LRU 的两种操作:Get:将它从链表中删除,并插入链表的头部。Delete:将它从尾部删除。Android 中的 LRUCache

2017-11-05 00:32:05 249

原创 LeetCode基础-查找-HashTable

假设待查找的对象是这样存在的:[key1, value1], [key2, value2], [keyX, valueX], … 我们可以把key的列表转过转化存入HashTable中。 使用基于HashTable的查找需要两步:用 Hash 函数将所有 key 都转化为数组的索引(整数)。如果多个 key 转化成为同一个数组的索引,则需要解决碰撞(collision-resolution)。

2017-11-04 22:06:59 582

原创 LeetCode基础-查找-平衡二叉查找树(红黑树)--未完成

红黑树的性质:大小为 N 的红黑树的高度不会超过 2 * lg N大小为 N 的红黑树,根结点到做任意结点的平均距离为 lg NJDK中的TreeMap 内部使用红黑树实现。 .NET中的SortedSet 内部使用红黑树实现。

2017-11-02 23:35:03 1064

原创 LeetCode基础-查找-二叉查找树

二叉查找树有链表的快速插入的优点,以及符号表快速查找的优点。 二叉查找树的性质是这样的:每个结点的 key 都大于其左结点的 key,小于其右结点的 key。按值从小到大遍历二叉树即是中序遍历。二叉查找树的查找操作:如果树是空的,则返回null。 如果被查找的 key 和根结点的键相待,查找命中。 否则就递归地子树中继续查找。如果被查找的 key 小于当前结点,就选择左子树,反之选择

2017-11-02 23:13:49 337

原创 LeetCode基础-查找-排序数组二分查找

查找思路: 在已排序的数组中查找某个元素,不断地从子数组开始查找,注意边界情况。递归方式:int[] Keys;public int search(int key, int low, int high){ if(high < low) { return low; } int mid = low + (high-low)/2; if(key

2017-11-02 08:59:51 298

原创 LeetCode基础-查找

用“符号表(symbol tabel)” 描述一个抽象的不表格,将值(value)存在表中,然后按照键(key)来搜索这些值。“符号表” 有时也被叫做 “字典”,类似英文字典,按字母排序,key 就是单词,value 就是释义。 “符号表” 有时也被叫做 “索引”。有三种经典的 符号表:二叉查找树红黑树散列表(hash 表)符号表一般支持这些接口:符号表中既不能有重复的 Key,也不能有

2017-11-02 08:50:37 241

原创 LeetCode基础-排序-二叉堆排序(优先队列)

有些情况下要求不一定要求数组全部有序,或者说不一定要一定性全部有序。 有些情况下先收集一些元素,找到这些元素中的最大值,然后重复这个步骤。 比如,电脑或手机上运行的多个应用程序,可以给每个程序分配一个优先队列,并总是处理下一个优先级最高的那个应用程序。这就需要优先队列了,它支持这两种操作:删除最大元素插入元素优先队列与队列(删除最老元素)和栈(删除最新元素)类似,但更高效。二叉堆数据结构能

2017-11-01 08:41:38 1408

原创 LeetCode基础-排序-快速排序

快速排序是应用最广泛的排序算法之一,流行的原因是它实现简单,而且是原地排序(只需要一个很小的辅助栈),缺点是非常脆弱,实现时要非常小心才能避免性能问题。快速排序同样也是一种分治的排序算法,将一个数组分成两个子数组,两部分独立地排序。合并排序把数组分成两个数组分别排序再合并,而快速排序的方式是两个子数组都有序时整个数组也就有序了。 合并排序按数量将数组分成两半,快速排序按大小将数组分成两半。publ

2017-10-31 23:55:15 3171

原创 LeetCode基础-排序-合并排序

这是一个典型的分治型算法,合并排序的思路是这样的: 将两个有序的数组归并成一个更大的有序数组。 先递归地将数组分成两半分别排序,再将结果合并起来。递归的实现(自上至下)public void sort(int[] a, int low, int high){ if(high <= low) { return; } int mid = low +

2017-10-31 23:17:02 334

原创 LeetCode基础-排序-插入排序

插入排序的思路是这样的: 像整理扑克牌那样,一张张来,将每一张插入到已经有序的牌中,这样会导致每个排在这张牌右边的元素都向右移动一个位置。对于大数组,且其中部分元素已经有序进行排序,比随机顺序的数组要快得多。代码如下:public void InsertSort(int[] a){ //升序排列 for(int i = 1; i < a.Length; i++) {

2017-10-31 22:08:31 619 3

原创 LeetCode基础-排序-选择排序

选择排序的思路是这样的: 首先,找到数组中最小的元素, 其次,将它和数组中的第一个元素交换(如果第一个就是最小的就和自己交换) 再次,在其余元素中找到最小的元素, 再次,将它和数组中的第二个元素交换 不断重复,直到最后一个元素。叫选择排序,是因为它不断地在其余元素中选择最小的那一个。 选择排序的移动是最少的,而交换的次数是N,其他排序算法都不具有这个性质。代码如下:public void

2017-10-31 08:41:07 668

原创 LeetCode基础-排序

排序是最基本也是最常用的算法之一。常用的几个排序算法是:排序 – 冒泡排序 – 插入排序 – 选择排序 – 合并排序 – 堆排序 – 快速排序这些排序算法的基本性质和特点如下:冒泡排序,插入排序,选择排序的平均时间复杂度都是:O(n2) 合并排序,堆排序,快速排序的平均时间复杂度都是:O(n*log2n)冒泡排序,插入排序,选择排序的空间复杂度都是:O(1) 合并排序的空间复

2017-10-31 08:33:19 369

原创 LeetCode基础-Stack

Stack在C#和Java中都有现成的定义,且在LeetCode中也可以直接使用。 其泛型版本定义的主要属性和方法如下:public class Stack<T>{ public int Count; public void Clear(); public T Peek(); //返回的对象顶部的 Stack 而不删除它。 public T Pop(); //删

2017-10-30 00:19:40 377

原创 LeetCode基础-链表-找到两个链表的交点

单链表数据结构: //Definition for singly-linked list. public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; } }思路: 注:此算法来自discuss区排第一名的一个比较巧妙的算法。

2017-10-28 21:19:53 701

原创 LeetCode基础-链表-判断链表是否有环

单链表数据结构: //Definition for singly-linked list. public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; } }思路: 有两个指针快慢套跑遍历,快指针每次走两格,慢指针每次走一格,当快

2017-10-28 19:15:42 379

原创 LeetCode基础-链表-合并两个有序链表

单链表数据结构: //Definition for singly-linked list. public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; } }思路: 相对简单,只要依次遍历两个链表,比较链表1和链表2当前结点值的大

2017-10-28 19:05:09 339

原创 LeetCode基础-链表-删除重复结点

单链表数据结构://Definition for singly-linked list. public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; } }思路: 比较简单,遍历结点,如果当前结点与下一结点的值相同,则

2017-10-28 18:44:07 425

原创 LeetCode基础-链表-反转链表

单链表数据结构: //Definition for singly-linked list. public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; } }非递归思路:遍历链表,不断将结点插入新链表的头结点。 使用3个结点:f

2017-10-28 13:05:30 231

UnityVirtualRealityProjectsSampleCode

Unity Virtual Reality Projects Sample Cod, 《Unity虚拟现实开发实战》示例代码

2016-12-23

Scrum VS2012

Scrum VS2012

2012-12-24

Pro.Agile. NET

Pro.Agile. NET

2012-12-24

Pro WCF 4.0

Pro WCF 4.0

2012-12-24

Programing Windows 6th

Programing Windows 6th

2012-12-24

Threading in C#

Threading in C#

2012-12-24

Pro. HTML5 Programming

Pro. HTML5 Programming

2012-12-24

Professional.Asp.Net.MVC4

Professional.Asp.Net.MVC4

2012-12-24

asp.net mvc 4 in action

asp.net mvc 4 in action

2012-12-24

.Net Performance Testing And Optimization

.NET性能测试和优化,还没细看。 关注性能测试的可以看看。

2012-12-24

NHibernate手册

NHibernate手册 NHibernate手册 NHibernate手册 NHibernate手册

2010-10-27

游戏编程指南 游戏编程指南

游戏编程指南 游戏编程指南 游戏编程指南 游戏编程指南

2010-10-27

程序员历年试题合集.CHM

程序员历年试题合集.CHM 程序员历年试题合集.CHM

2010-10-27

2010年上半年(5月)软件设计师考试下午试卷(PDF清晰).pdf

2010年上半年(5月)软件设计师考试下午试卷(PDF清晰).pdf

2010-10-27

2010年5月软设上午试题及分析解答

2010年5月软设上午试题及分析解答 2010年5月软设上午试题及分析解答

2010-10-27

QT中文手册 QT中文手册

QT中文手册 QT中文手册 QT中文手册 QT中文手册

2010-10-27

C++primer笔记

C++primer笔记C++primer笔记C++primer笔记C++primer笔记C++primer笔记

2009-05-08

oracle报错代码大全

oracle报错代码大全oracle报错代码大全oracle报错代码大全oracle报错代码大全

2009-05-08

Linux 命令全集

Linux 命令全集Linux 命令全集Linux 命令全集Linux 命令全集

2009-05-08

windowsSDK编程

windowsSDK编程

2007-06-03

C#.NET 开发者手册

C#NET 开发者手册

2007-04-08

C#完全手册

一,概述.二,结构.三,面向对角.四,深入了解

2007-04-08

ASP应用手册

常用参考,引据经典,详细分解,技巧实例,心得体会

2007-04-08

sql中文参考手册.chm

sql中文参考手册 一些概念性的内容

2007-04-08

空空如也

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

TA关注的人

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