- 博客(178)
- 资源 (23)
- 收藏
- 关注
原创 leetcode:Bitwise AND of Numbers Range
一、 题目给出一个范围,这个范围在0--2147483647,返回在这一个范围的所有整数的与操作值。这个范围包括两个边界。例如:给出[5,7] 返回的是4二、 分析或许我们最能轻易想到的是使用暴力解法,即将范围中的数依次与操作,但是这样势必会超时。那么该如何做呢?我们做与操作其实是在将这些数二进制中相同位置不同值的去掉,留下相同的,在《编程之美》中有一个求一个数中1的个数的题目,在
2015-04-21 00:07:54
1070
原创 leetcode:Binary Tree Right Side View
一、 题目 给你一个二叉树,假设几就站在树的后边,那么此时你就只能看到最右边的节点了。例如: 1 / \ 2 3 \ \ 5 4 返回值就是[1,3,4]二、 分析 对于树的遍历,我们通常会使用DFS或BFS,这个题目其实同样是遍历,不过呢,我们只记录下来
2015-04-20 23:27:47
1035
原创 leetcode:Reverse Words in a String
一、 题目给出一个字符串,以单词为单位反转字符串。例如 i am echo返回 echo am i二、 分析仔细分析会发现,对于中间结果我们需要保存,即我们得保证以单词为单位。另外我们需要考虑到下面的情况1、中间有多个空格的处理2、没有空格的字符串3、反转后开头和结尾不能有空格4、最后的结果单词间得有空格所以,由以上我们有两种思路,一种就是以单词为单位反转,
2015-03-23 23:27:06
1008
原创 leetcode:Rotate List
一、 题目给出一个链表,将右边k个节点移到前面。例如:1->2->3->4->5->NULL,k = 2时返回 4->5->1->2->3->NULL二、 分析之前我们遇到过将字符右移或左移的,当时的思路是将前一部分反转,后一部分反转,整体再反转,即可得到结果。不过这道题我们需要换一种思路,其实对于这种链表的问题,我们可以总结出,链表的反转都可以直接从某一个位置开始截断即
2015-03-23 23:16:05
1028
原创 蓄水池抽样
沉默了这么多天没有发过文章,怎么会突然看到这个算法的呢?话说这是某搜索的二面面试官给的一个题目,我知道一定会有人吐槽,PS:提前说下,这道题在《编程珠玑》上有类似的。。。曾经这本书就在我面前,但是我没有珍惜,直到今天我才后悔莫及。。。。当时觉得这本书太乏味,没耐性看,事后一狠心就买了一套,一定要看.....哭。。。。。。当时面试官是这样问的——给你一个文件,里面每一行包含一个字符串(海量的
2015-03-23 15:41:12
1290
原创 leetcode:Find Peak Element
一、 题目峰值元素的定义是比邻居元素都大的元素。给定一个数组,其中array[n] != array[n + 1],找出峰值元素并返回它的索引。但是其中可能含有多个峰值,不过返回其中的一个就可以了,可以假设num[-1] = num[n] = 负无穷大。例如,[1,2,3,1],3就是峰值,返回索引2。二、 分析方法一:暴力,其实这个方法还可以吧,如果是一般的对称情况,例如
2015-02-26 18:21:12
827
原创 leetcode:Sum Root to Leaf Numbers
一、 题目给一个二叉树,其中节点只可能是数字0-9,每一条路径组成一个数。如下: 1 / \ 2 3左边路径1->2 代表 12.右边路径1->3 代表 13. sum = 12 + 13 = 25.二、 分析想起了一句话,树的问题可归结为递归问题,这道题也一样,每次经过一个节点会遇到三中情况:1、不包含左/右节点;
2015-02-26 17:07:34
764
原创 leetcode:Length of Last Word
一、 题目给定一个字符串s由大/小写字母和空的空间字符' ',返回字符串的最后一个单词的长度。如果最后一个单词不存在,则返回0。注:一个单词被定义为一个不带空格的字符序列。例如,给出s =“Hello World”,返回5。二、 分析没有什么复杂的算法,按照规则考虑所有情况就行,有下面的几种情况:1、“ ”2、“abc”3、“ abc”4、“
2015-02-19 09:38:52
964
原创 const关键字
const一般的意义是 ,恒定不变,修饰的对象不能改变,或是为了保护数据,提高了程序额健壮性。分类如下:常变量: const 类型说明符 变量名常引用: const 类型说明符 &引用名常对象: 类名 const 对象名常成员函数: 类名::fun(形参) const常数组: 类型说明符 const 数组名[大小]常指针: const 类型说明符* 指针名 ,类型说明符*
2015-02-18 17:06:15
733
原创 class和struct的区别
1、最主要的区别,默认的继承访问权限。struct是public的,class是private的。2、关于使用大括号初始化class和struct如果定义了构造函数的话,都不能用大括号进行初始化如果没有定义构造函数,struct可以用大括号初始化。如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。3、关于默认访问权限class中默认的成员访问权限
2015-02-18 11:17:42
1127
原创 C++内存泄漏和内存碎片的产生及避免策略
1.内存泄漏的定义 一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该 内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。 2、内
2015-02-18 11:05:17
18956
原创 sizeof和strlen的区别
1、sizeof是一个操作符,结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小.而strlen是一个库函数,使用需要包含头文件. 2、sizeof的参数可以是数据类型或变量,而strlen函数只能以结尾为'\0'的字符串的作为参数. 3、sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是
2015-02-17 21:50:07
1969
原创 声明和定义的区别
1.变量的声明和定义有什么区别?声明部分的作用是对有关的标识符(如变量、函数、结构体、共用体等)的属性进行说明。对于函数,声明和定义的区别是明显的,函数的声明是函数的原型,而函数的定义是函数功能的确立。对函数的声明是可以放在声明部分中的,而函数的定义显然不在函数的声明部分范围内,它是一个文件中的独立模块。在声明部分出现的变量有两种情况:一种是需要建立存储空间的(如int a;);另一种是不
2015-02-17 21:33:34
1468
原创 leetcode:Majority Element
一、 题目给出一个大小为n的数组,找出主元素,主元素是出现次数大于n/2的数。假设数组不为空,主元素一定存在。二、 分析这道题在面试中很容易见到,找出出现次数大于全体个数一半的数。思路是只需要设置一个计数器,只有它为0时才改变主元素的值,如果出现等于主元素的数则加1,否则减1。即如果有该数那么一定会找出主元素。 class Solution {public: int
2015-02-17 20:21:40
732
原创 leetcode:Combination Sum
一、 题目给一个集合和目标数,其中没有重复的数,其中的某些数的和为目标数,同一个数使用的次数没有限制。注:所有的数(包括目标数)都是正的结果必须是有序的结果中没有重复的二、 分析根据题目,第一次写的代码感觉没什么问题了,谁知道出现错误,原因是没有处理同一个数使用多次的情况,再看看自己的代码,顿时无望,果断删了重写。那么怎样处理这种情况呢?................
2015-02-17 19:21:29
825
原创 Valid Sudoku
一、 题目数独游戏,每一行,每一列,每一个小方格中含有数字1-9且不重复,不要求数字全部出现,可以用’.’代替。判断给出方格的是否符合要求。二、 分析第一次玩这个游戏,不知道规则,搜之,原来就是要遍历判断,那就查询每一行,每一列,每一个方格啦!主要的技巧是在判断方格时,可以使用一个四重for循环,优化后使用一个三重循环。class Solution {public: bo
2015-02-16 16:00:56
842
原创 leetcode:Search for a Range
一、 题目给出一个已经排好序的数组和一个数字,找出在这个数字在数组中的范围。例如:[5,7,7,8,8,10]和8返回:[3,4]二、 分析题目很基础,就是找出等值的数字的开始和结束索引,上去就遍历当第一次遇到等值时记录下左索引,最后一次遇到记录下右索引也不会超时。如下://遍历法class Solution {public: vector searchRang
2015-02-16 13:02:47
812
原创 Longest Common Prefix
一、 题目一个vector中包含若干个字符串,求出这些字符串的最大前缀。二、 分析一开始我还以为是最长公共子序列呢!后来发现是前缀...我能想到的是只有一个个比较一个个添加了,不知道还有没有更好的办法!class Solution {public: string longestCommonPrefix(vector &strs) { string res;
2015-02-10 23:34:58
750
1
原创 leetcode:Excel Sheet Column Number
一、 题目给定一个出现在Excel表格中的列标题,返回其对应的列号。例如: A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 二、 分析题目说的很清楚,其实仔细分析下很简单的,就是将一个字符串转化为整型数(atoi())的变形---以26为基数,而且
2015-02-10 22:56:45
841
转载 程序员面试的Top10大算法概念
以下是在编程面试中排名前10的算法相关的概念StringLinked ListTreeGraphSortingRecursion vs. Iteration (递归 vs. 迭代)Dynamic Programming (动态规划)Bit Manipulation (位操作)Probability (概率问题)Combinations and Permutations (排列组合
2015-02-10 12:48:45
674
原创 leetcode:Divide Two Integers
一、 题目不使用乘法、除法、求余运算实现除法运算,除数和被除数、结果都是用int型。如果溢出就返回MAX_INT。二、 分析看到题目后我立马想到了计算机组成原理中的一位除法和二位除法,不过想想在这里实现起来又是太麻烦了。那就先试试暴力法吧,被除数 - 除数 = ???一直减减减直到小于等于0,想想自己都觉得超时。。。如下,果然超时 class Solution {publ
2015-02-10 11:09:10
742
原创 leetcode:Pow(x, n)
一、 题目题目说的很清楚,就是实现pow()函数。二、 分析看到题目后,首先想到一个个算,心想应该会超时,果不其然。想到了二分法,这样减少了不少的运算。没有什么难度的思路。虽然思路是二分,但是又有不同的实现形式。下面使用三种》while实现: class Solution {public: double pow(double x, int n) {
2015-02-08 17:46:02
747
转载 cc150:判断一棵树是否为平衡树
判断一棵树是否平衡,需要注意的是和判断一棵树是否为平衡二叉树的区别。 平衡二叉树的定义为:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1, 并且左右两个子树都是一 棵平衡二叉树。 此时指的是这棵树任意两个叶子结点到根结点的距离之差不大于1。节点定义为:struct Node{ int key; Node *lchild, *rchild, *parent;};
2015-02-06 20:21:00
1230
原创 leetcode:Palindrome Number
一、 题目试确定一个整数是否为回文数。并不使用额外的空间。提示:负整数可能是回文数吗?(例如 -1)如果你想要将整数转换成字符串,那么你注意到不能使用额外的空间的限制。可能你尝试翻转整数,但是,如果你已经解决这个问题“逆向整型”,你要知道,颠倒整数可能会溢出的情况。那么你会如何处理这样的情况呢?要有解决这个问题的一种更通用的方法。二、 分析了解题目的意思后,其实问题
2015-02-06 14:39:02
884
原创 Count and Say
一、 题目题目说,如下的字符串:1, 11, 21, 1211, 111221, ...1读成11(一个1)11读成21(两个1)21读成(一个2一个1)......给一个整数,返回对应得语句。返回语句为一个字符串二、 分析题目的意思不是很明白,其实就是说第i+1个字符串是第i个字符串的读法,第一字符串为 “1”比如第四个字符串是1211,它的读法是 1个1
2015-02-05 20:04:35
779
原创 leetcode:First Missing Positive
一、 题目给出一个未排序的数组,找出第一个丢失的正整数,例如:给出[1,2,0] 返回3 给出[3,4,-1,1] 返回2注:算法是O(n)的时间和常量的空间二、 分析一开始,我理解错误,以为是找出第一个右边比左边小的数,后来发现我想的太简单了,题目的难点在它的要求,即时空要求。我们不能使用一般的排序或重新开辟数组,所以我们只有使用数组本身,即建立数与索引的关系:A[n
2015-02-05 13:13:08
678
原创 leetcode:Next Permutation
一、 题目 这道题给出一个数列,求大于这个数列的最小数列。例如:1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1二、 分析喜欢使用C++的童鞋或许会马上想到next_permutation()这个库函数,没错,其实这道题就是实现的它(严格说来只是初步实现),如果可以的话,如果直接输入这一行代码就可通过: void
2015-01-25 00:25:52
1095
原创 leetcode:Remove Nth Node From End of List
一、 题目给定一个单链表,删除倒数第n个节点,返回删除了的链表。例如: 已知: 1->2->3->4->5, n = 2.处理后:1->2->3->5. 试着遍历一次完成。二、 分析看到这道题我第一感觉就是双指针,因为要删除倒数第n个数,所以两个指针的间距也就是这个n,当右边的指针到达末尾处时,那么左指针的下一个指针就是要删除的节点。其实会有下面
2015-01-14 08:32:57
759
原创 leetcode:Search Insert Position
一、 题目在一个数组中查询一个目标数,给出的是一个有序的数组、元素个数和目标数,不过特别的是这个数组可能是旋转(rotate)的。例如:数组可能是 0、1、2、4、5、6 也可能是4、5、6、0、1、2二、 分析这个题首先我们会想到二分查找,但是仔细想想好像又不是,因为不一定是正序的,还有可能旋转,因为rotate的原因,如果我们取一半的时候
2015-01-03 22:06:42
831
原创 leetcode:3Sum
一、 题目给出一个数组S包含n个整数,找出不重复的三个元素a、b、c使a+b+c=0。例如给出S = {-10 1 2 -1 -4},解果是: (-1, 0, 1) (-1, -1, 2)二、 分析首先我们看到这个题目会想到Brute-Force(简单的模式匹配)直接使用三重循环来匹配所有元素组合找出结果。虽然我在每一层循环都做了优化来减少一
2015-01-02 00:22:31
1048
原创 leetcode:String to Integer (atoi)
一、 题目题目目的很明显,就是将一个字符串转换成整数,也就是平时经常用到的atoi.二、 分析题目其实不难,不过需要注意下面几点:1、字符串前的空白2. 字符串所表示数值的正负号3. 结束条件,遇到非数字或者字符'\0'结束4. 考虑溢出,与int值所能表示的最大(0x7fffffff)和最小值进行比较5. 考虑异常输入情况下,用全局变量valid来
2014-12-30 23:59:51
934
原创 leetcode:Valid Palindrome
一、 题目题目给出一个字符串,求出它是否为回文字符串,其中只有字母和数字是有效字符,其他的字符可以忽略。例如:"Aman, a plan, a canal: Panama" 是回文字符串."race a car" is not a palindrome.不是回文字符串二、 分析看到这个题目我首先想到的是使用两个数组将有效字符串保存,其中一个正序一个逆序,然后做比
2014-12-26 20:55:25
861
原创 leetcode:Decode Ways
一、 题目给定一个字符串包含26个字母,字母与数字产生映射,如:‘A’ --> 1‘B’ --> 2…‘Z’ --> 26如果给一串数字,请给出编码的方式有多少? *注意:’12’ 可以编码成”AB”,也可以编码成”L”.二、 分析可以看出题目的目的是考察动态规划,即每走一步可能有两种情况,是不是和爬台阶很像呢?对的。这道题思路有两种但
2014-12-26 19:38:58
753
原创 20141419
好多天不写题解了,这些天一直忙着和同学在搞QQ for Linux,而且苦逼的重学了Qt,不过我还是很有兴趣的,学习的过程中发现当前的关于Qt的网上或者书籍资料都过时了,Qt已经到5.4版本了,而这些资料都是4.X,学习的过程中有不少的阻碍,尤其对于初学者会一次次灰心,所以,我就想参考一些资料写一个Qt方面的教程,不至于打消很多同学的积极性。还有就是个人博客已经搭建好(wgliang.github
2014-12-19 20:24:16
597
原创 Qt5.4中遇到找不到头文件<QApplication>等。。
从新学习Qt时,重装了Qt5.4,当运行Hello World例子时,遇到了下列的情况 #include #include #include int main(int argc, char *argv[]){ QApplication a(argc,argv); QDialog w; QLabel label(&w); label.setText("He
2014-12-18 14:06:14
11982
5
原创 leetcode:Unique Paths
题目是这样的,给定一个m*n的矩形方格,每次走一格,并且只能向右和向下走,求从左上角到右下角的路径数。扩展问题:如果在方格中写入0和1,其中1代表障碍,也就是不能通过此方格,求其路径数。
2014-12-09 23:36:56
757
原创 JavaScript学习记录
本来是14年暑假写的,当时用过后就放那了,也没来得及分享记录,纯粹是个人笔记,没什么水平可言,知识记录了一部分自己认为重要些的梗概,想要看过后就学会JS是不可能的,主要是平时使用,暑假学的JS和PHP近来也没有用过,都荒废了。。。。不用是不行的
2014-12-06 18:16:10
555
原创 JavaScript笔记八:DOM
DOM(文档对象模型):针对HTML和XML文档的一个API(应用程序编程接口)。描绘了一个层次化的节点树,允许开发人员添加、移除、修改页面的某一部分。成为表现和操作页面标记的真正的跨平台、语言中立的方式。1、节点层次 DOM可以将任何的HTML或XML文档描绘成一个多层节点构成的结构。 Node类型:用于抽象地表示文档中一个独立的部分,所有其他的类型都继承自Node;Do
2014-12-06 18:11:42
655
《QtCreator快速入门》第2版PPT课件(1-9章).
2014-10-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人