自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 找工作准备计划

四月份就要开始找实习试试水!九月份就要开始找工作了!快要接受检验了,慌死了。>< 到今天还没搞清楚要做什么岗位,进什么类型的企业。自己一方面想进互联网企业,虽然苦,但觉得苦两年能锻炼自己,去北上广深这些一线城市机遇多,自己眼界也能开阔。一方面觉得要想在那些一线城市定居也不是简单的事,还不如留在武汉,进个国企之类的,压力也不会那么大,空余时间也会比较多。这些问题还是没搞清楚。 上午看了一下主流的互

2016-02-23 15:09:22 621

原创 数组

数组名的值是一个指针常量。下标引用 int array[10];int *ap=array+2;ap[0]//除了优先级职位,下标引用和间接访问完全相同。ap[0]等价于*(ap+(0))。ap[6]//等价于 *(ap+6)ap[-1]//等价于 *(ap-1),也就是array[1]指针与下标。指针比下标更有效率,//每一次循环都要做乘法运算:array+a*sizeof(int

2016-01-28 12:39:34 243

原创 图的基础算法-广度优先搜索/深度优先搜索

图有矩阵存储和链表存储两种。这里采用链表存储。 参考《算法导论》上面的做法,首先定义图结点的结构。为了跟踪算法的进展,广度优先搜索在概念上将每个结点涂成白色。在算法推进过程中,结点的颜色可能变成灰色或者黑色。在搜索过程中,第一次遇到一个结点时,表示该结点已被发现,此时该结点的颜色将从白色变成灰色。灰色或黑色结点都是已经被发现过的结点。所有与黑色结点邻接的结点都已经被发现。对于灰色结点来说,其邻接结

2016-01-22 17:25:05 372

原创 贪心算法-哈夫曼编码

《算法导论》引理16.2:令C为一个字母表,其中每个字符c属于C都有一个频率c.freq。令x和y是C中频率最低的两个字符,那么存在C的一个最优前缀码,x和y的码字长度相同,且只有最后一个二进制位不同。(证明问题具有贪心选择性质) 引理16.3 令C为一个给定的字符表,其中每个字符c属于C都定义了一个频率c.freq。令x和y是C中频率最低的两个字符。令C1为C去掉字符x和y,加入一个新字

2016-01-20 10:07:40 1347

原创 动态规划-最优二叉搜索树

过程类似 矩阵链算法

2016-01-17 20:30:55 363

原创 动态规划-最长公共子序列

若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。 给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和

2016-01-17 20:29:31 279

原创 动态规划-矩阵链乘法

矩阵链乘法问题:给定n个矩阵的链<A1,A2...An>,矩阵Ai的规模为p[i-1]*p[i],求完全括号化方案,使得计算乘积A1A2…An所需标量乘法次数最少。 m[i][j]表示矩阵链Ai…j所需标量乘法次数的最小值。 当m[i][j]只包含唯一的矩阵Ai,即i=j,m[i][i]=0;m[i][j]=m[i][k]+m[k+1][j]+p[i-1]p[k]p[j](i<=k<j,i<j)

2016-01-17 20:17:49 266

原创 动态规划-求二项式系数

c(n,i)=c(n-1,i-1)+c(n-1,i) c(n,0)=1 c(n,n)=1

2016-01-17 20:05:44 557

原创 红黑树

笔者在之前学习数据结构的时候,看到红黑树觉得好难就跳过了。最近在看《算法导论》里面也讲到了红黑树,于是笔者决定好好学习红黑树的知识。然而在看书上的讲解,感觉完全看不懂,很难吸收里面的知识。 对于左旋转和右旋转,虽然能看懂代码,但是完全不明白为什么要会这样的操作。对于红黑树的插入和删除时破坏红黑树性质时为什么要这样变颜色那样变颜色,也是不知所云。 后来在网上搜资料,看见有人说红黑树是对2-3查找树

2016-01-15 10:16:26 222

原创 二叉搜索树

二叉搜索树支持多种动态集合操作。treeSearch、treeMin、treeMax、successorTree(后继)、predecessorTree(前驱)、insert、delete 一棵二叉查找树是按二叉树结构来组织的。用链表来表示二叉查找树。结点的结构如下。 二叉搜索树的关键字的性质:设x为二叉搜索树的一个结点。如果y是x左子树中的一个结点,则y.val<=x.val;如果y是x右子树

2016-01-14 09:50:43 233

原创 快速排序

快速排序使用了分治思想。 对典型的子数组A[p..r]进行快速排序的三步分治过程: 分解: 数组A[p..r]被划分为两个(可能为空)子数组A[p..q-1]和A[q+1..r],使得子数组A[p..q-1]的所有元素都不大于A[q],数组A[q+1,r]的元素都大于A[q]中的每个元素。这里需要计算下标q。 解决: 通过递归进行快速排序,对子数组A[p..q-1]和A[q+1,r]都进行快速

2016-01-08 11:43:51 189

原创 堆排序

在最大堆中,最大堆性质是指除了根以外的所有结点i都满足: A[PARENT(i)]>=A[i] 在最小堆中,最小堆性质是指除了根以外的所有结点i都满足: A[PARENT(i)]<=A[i]维护堆的性质 void maxheap(vector<int> &heap,int i,int heapsize) 该函数用于维护最大堆性质的重要过程。这里假定根结点为LEFT(i)和RIGHT(i)的

2016-01-07 21:01:32 175

原创 归并排序

mergeSort(A,p,q,r),其中A是一个数组,p,q,r是数组的下标,满足p<=q<=r。该过程假设A[p..q]和A[q+1..r]是已排好序,该函数合并这两个子数组形成单一的已排好序的子数组并代替当前的子数组A[p..r]。 该归并过程可以用扑克牌游戏描述。桌上有两堆牌,每堆都已排序,最小的牌在顶上。我们希望将两堆牌合并成单一的排好序的输出堆。基本步骤包括在牌面朝上的两堆牌的顶上两张

2016-01-06 20:22:20 192

原创 插入排序

插入排序,对于少量元素的排序,是一个有效的算法。 插入排序类似于排序一手扑克牌。左手是现有的已排序的扑克牌,桌上有牌堆,我们每次从牌堆上那一张牌并将它插入到左手正确的位置。void insertSort(vector<int> &nums){ for(int i=1;i<nums.size();i++){ int key=nums[i]; int j=i-1

2016-01-06 19:54:13 237

原创 字符串左旋转--编程珠玑

问题描述:待移动的数组假设为str,长度为len,需要左旋转rotate位 方法一:最简单方法。将数组的前rotate元素复制到一个临时数组中,然后将余下的len-rotate个元素向左移动i个位置,最后将最初的rotate个元素从临时数组中复制到a中余下的位置。这样的做法产生了过大的存储空间的消耗。 方法二:杂技算法。移动str[0]到临时变量tmp,然后移动str[rotate]至str[0

2016-01-05 20:21:56 467

原创 Multiply String-Leetcode

Given two numbers represented as strings, return multiplication of the numbers as a string. Note: The numbers can be arbitrarily large and are non-negative.这道题思路很简单,根据乘法的算法,嵌套循环。class Solution {pu

2016-01-04 19:58:28 317

原创 Combination Sum I/II - Leetcode

Combination Sum Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T. The same repeated number may be chosen from C

2015-12-29 20:15:22 209

原创 Linux命令

常见多大的处理目录的命令: cd: 切换目录 pwd: 显示当前目录 mkdir: 新建一个新的目录 rmdir: 删除一个空的目录查看文件与目录: ls -a: 全部的文件,连同隐藏的文件(开头为 . 的文件)一起列出来 -d: 仅列出目录本身,而不是列出目录内的文件数据 -l: 列出长数据串,包含文件的属性与权限等数据复制、删除与移动: cp: 复制文件或目录 cp [-

2015-12-28 21:33:15 206

原创 Count and Say -- Leetcode

The count-and-say sequence is the sequence of integers beginning as follows: 1, 11, 21, 1211, 111221, … 1 is read off as “one 1” or 11. 11 is read off as “two 1s” or 21. 21 is read off as “

2015-12-28 15:04:36 200

原创 二叉树和其他树

路径长度:根节点到任何节点有唯一路径,路径所经过的边数,称为路径长度。 节点深度:根节点到任一节点的路径长度,即所谓该节点的深度。 节点高度:该节点到叶子节点的路径长度。 二叉树和树的根本区别: 二叉树的每个元素都恰好有两棵子树。而树的每个元素可有任意数量的子树。 在二叉树中,每个元素的子树都是有序的,有左子树和右子树之分。树的子树是无序的。二叉树的特性一棵二叉树有n个元

2015-11-25 17:04:28 762

原创 Search in Rotated Sorted Array-Leetcode

题意:Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the array return it

2015-11-24 10:29:12 161

原创 Next Permutation-Leetcode

题意:计算下一个排列组合。首先我们需要弄清楚什么是前一个排列组合。考虑三个字符所组成的序列{a,b,c}。这个序列有六种排列组合:abc,acb,bac,bca,cab,cba。这些排列组合根据less-than操作符做字典顺序的排序。abc名列第一,因为每个元素都小于其后的元素。以bac和bca为例,bac在bca之前,因为序列ac小于ca。 思路:从最尾端开始往前寻找两个相邻元素,另第一元素为

2015-11-24 09:55:44 274

原创 Divide Two Integers - Leetcode

题意:不使用乘、除和取余的操作。来做除法 思路: 1、使用减法,每将dividend减divisor,count加1,直到剩余的数字小于divisor。最后超时了。 2、改用移位的方法,类似于我们手动计算除数时是从最高位开始。最后通过。class Solution {public: int divide(int dividend, int divisor) { lon

2015-11-20 12:10:05 232

原创 Remove Element - Leetcode

题意:在数组中移掉指定元素val,得到新的长度newlength。数组元素顺序可以改变,并且新的长度之后的元素可以忽略。 这道题关键在于要将val外的元素移到newlength前面。如果遍历数组然后删除等于val的项,会改变数组结构,不便于遍历。所以这里的做法是不删除元素,只是将元素向前移动。class Solution {public: int removeElement(vector

2015-11-19 15:34:10 228

原创 散列表(HashTable)

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位。 散列表通过将数据的关键值经过散列函数处理得到值即为散列表中对应的散列数组下

2015-11-17 17:11:37 313

原创 字典

字典是由一些形如(k,v)的数对所组成的集合,其中k是关键字,v是与关键字k对应的值。任意两个数对,其关键字都不等。字典的关键字是有序的。可以仅按照字典元素本身的关键字来访问元素,即随机访问;也可以按照关键字递增的顺序来依次访问字典中的元素,即顺序访问。 多重字典,允许两个或更多的数对可以具有相同的关键字。template<class K, class E>class dictionary {

2015-11-17 11:18:07 279

原创

队是先进先出的数据结构。需要一头一尾两个指针,front和rear。template<class T>class queue { public: virtual ~queue() {} virtual bool empty() const = 0; // return true iff queue is empty v

2015-11-16 17:38:15 395

原创 堆栈

堆栈 堆栈是后进先出的数据结构,会有一个指向堆栈顶部元素的指针stacktop。 堆栈可以采用数组存储或者链表存储。template<class T>class stack{ virtual ~stack()=0; virtual bool empty()=0; virtual int size()=0; virtual void pop()=0; vi

2015-11-16 15:59:05 297

原创 Merge k Sorted Lists-Leetcode

题意:合并K个有序链表返回合并后的链表 思路:最直观的思路是将第一个和第二个链表合并为一个链表,再将该链表与后一个合并,以此类推。时间复杂度为o(kn),Time Limit Exceeded。class Solution {public:ListNode* merge2Lists(ListNode* l1, ListNode* l2){ ListNode* head = NULL;

2015-11-10 09:33:09 190

原创 面向对象程序设计(多态、转换、继承)

访问级别在没有继承之前,类只有两种用户:类本身的成员和该类的用户。将类划分成public和private访问级别,则反映了类本身成员和友元与类用户的分隔。(类成员和友元/类用户) 有了继承之后,类的第三用户就是从类派生定义新类的程序员。protected访问,实现允许派生类访问那些仍然不允许类用户访问的成员。 基类提供给派生类型的接口是public和protected组合。继承作

2015-11-06 11:46:44 294

原创 顺序容器string操作介绍

string对象的定义和初始化string s1;string s2(s1);string s3("value"); //"value"是字面值string s4(n,'c');字符串字面值和标准库string类型不一样,为的是与C语言兼容string对象的读写 标准输入输出。读取策略:读取并忽略开头所有的空白字符读取字符直到再次遇到空白字符读入未知数目的对象while(cin>>wo

2015-11-04 11:00:15 229

原创 Generate Parentheses - Leetcode

题意:n对括号,所有的排列情况。"((()))", "(()())", "(())()", "()(())", "()()()"思路:这道题笔者不会!TT 网上看了这道题的解题思路。虽然懂了,但我还不习惯这种思维方法。TT 该问题和《编程之美》的买票找零问题一样,通过买票找零问题我们可以知道,针对一个长度为2n的合法排列,第1到2n个位置都满足如下规则:左括号的个数大于等于右

2015-11-02 16:52:33 260

原创 Merge Two Sorted Lists - Leetcode

题意:合并两个有序链表。 思路:此题难易程度是easy,在数据结构书中讲链表这一块有这个题目出现。做法很简单,分别用指针指向两个链表,比较指针所指的值大小,将值小的那一项放入新链表中,并将该指针向后移动一位。 笔者第一次提交的代码如下。这段代码是有问题的,他用r指针确实按从小到大的顺序遍历的两个链表的元素,head也确实是所谓新链表的头指针的内容。但这里最大的问题是并没有生成完整的链表!head

2015-10-28 16:14:49 304

原创 Valid Parentheses - Leetcode

题意:判断包含括号 ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ 和 ‘]’的字符串是否有效。 在学过栈的知识后,知道这道题很明显需要用到栈,我们可以遍历字符串,将字符串中的’(‘,’[‘,’{‘压入栈中,后面遇到与之对应的反括号则弹出。如果遍历到一个反括号,并且栈中并没有与之对应的括号,则说明不合法,直接返回false。将字符串遍历完成后,如果堆栈是空的则返回true,否则返回false。cl

2015-10-28 10:45:33 205

原创 Remove Nth Node From End of List - Leetcode

题意: Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5.这道题的难易程度是easy,可是笔者就是笨就是不专心然后没想出来,最后还是看网上的思路。设置两个指针,使得两个指针的距离是n-

2015-10-28 09:41:48 198

原创 4 Sum -Leetcode

题意: For example, given array S = {1 0 -1 0 -2 2}, and target = 0. A solution set is: (-1, 0, 0, 1) (-2, -1, 1, 2) (-2, 0, 0, 2)思路:该题做法可以仿照3Sum的做法。这里是先依次固定一个数字,然后按照3Sum的

2015-10-27 15:44:38 225

原创 Letter Combinations of a Phone Number - Leetcode

题意:Given a digit string, return all possible letter combinations that the number could represent. A mapping of digit to letters (just like on the telephone buttons) is given below.

2015-10-27 11:39:52 277

原创 3Sum - Leetcode

题意:找出数组中三个数字之和为0的数对 For example, given array S = {-1 0 1 2 -1 -4} A solution set is: (-1, 0, 1) (-1, -1, 2)Leetcode第一题是Two Sum,经网上查看资料,kSum是一系列的算法题目。主要有三种解法: 第一种方法,暴力,枚举所有的k个数字

2015-10-26 17:19:10 283

原创 Roman to Integer - Leetcode

题意:将罗马数字转换成整型数 思路:借鉴上一道将整型数转换成罗马数字的第二种方法,先对照列出“I,V,X,L,C,D,M”的字符数组和值数组。然后遍历给出的罗马数字字符串,将获取的字符对照的数值存到一个临时变量k中。 如果下一个字符的数值等于k,则k+=value[j]; 如果下面得到的数值大于该变量k,则k=value[j]-k; 直到下一个字符的数值小于k,则将k加

2015-10-23 15:39:38 214

原创 Integer to Roman - Leetcode

题意:将整型数转换成罗马数字。(记得之前在户部巷玩,有路边摆摊的说一个不错的写出罗马数字1到100,礼品随便挑。做完这一题估计可以去试试了)在做此题之前,需要弄清楚罗马数字的基本字符和规则。 1 5 10 50 100 500 1000 I V X L C

2015-10-23 10:49:37 223

空空如也

空空如也

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

TA关注的人

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