- 博客(48)
- 资源 (6)
- 收藏
- 关注
原创 LeetCode刷题(C++)——Add Two Numbers(Medium)
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return
2017-04-30 21:32:10 257
原创 LeetCode刷题(C++)——Path Sum II(Medium)
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.For example:Given the below binary tree and sum = 22, 5 / \
2017-04-30 15:57:29 257
原创 LeetCode刷题(C++)——Path Sum(Easy)
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.For example:Given the below binary tree and sum
2017-04-30 15:17:48 257
原创 LeetCode刷题(C++)——Symmetric Tree(Easy)
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For example, this binary tree [1,2,2,3,4,4,3] is symmetric: 1 / \ 2 2 / \ / \3 4 4 3
2017-04-30 11:22:36 304
原创 LeetCode刷题(C++)——Balanced Binary Tree(Easy)
Given a binary tree, determine if it is height-balanced.For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never diffe
2017-04-30 10:51:57 334
原创 LeetCode刷题(C++)——Convert Sorted List to Binary Search Tree(Normal)
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST./** * Definition for singly-linked list. * struct ListNode { * int val; * Lis
2017-04-29 15:37:06 282
原创 LeetCode刷题(C++)——Convert Sorted Array to Binary Search Tree(Easy)
Given an array where elements are sorted in ascending order, convert it to a height balanced BST./** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *l
2017-04-29 14:34:33 282
原创 LeetCode刷题(C++)——Binary Tree Zigzag Level Order Traversal(Medium)
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).For example:Given binary
2017-04-29 13:36:05 379
原创 LeetCode刷题(C++)——Binary Tree Level Order Traversal II(Easy)
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).For example:Given binary tree [3,9,20,null,null,1
2017-04-29 11:48:00 287
原创 LeetCode刷题(C++)——Binary Tree Level Order Traversal(Normal)
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).For example:Given binary tree [3,9,20,null,null,15,7], 3 / \ 9 2
2017-04-29 11:39:24 267
原创 LeetCode刷题(C++)——Construct Binary Tree from Inorder and Postorder Traversal(Normal)
题目描述Given inorder and postorder traversal of a tree, construct the binary tree.Note:You may assume that duplicates do not exist in the tree./** * Definition for a binary tre
2017-04-28 21:21:54 373
原创 剑指offer(C++)——重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * struct TreeNode { * int val;
2017-04-28 20:58:29 978 1
原创 LeetCode刷题(C++)——Construct Binary Tree from Preorder and Inorder Traversal(Normal)
题目描述Given preorder and inorder traversal of a tree, construct the binary tree.Note:You may assume that duplicates do not exist in the tree./** * Definition for a binary tree
2017-04-28 20:54:07 360
原创 LeetCode刷题(C++)——Maximum Depth of Binary Tree(Easy)
题目描述Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node./** * Definition for a binary
2017-04-28 17:10:19 299
原创 LeetCode刷题(C++)——Minimum Depth if Binary Tree(Easy)
题目描述Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node./*Definition for binary tree
2017-04-28 16:00:08 261
原创 程序员面试金典(C++)——确定字符互异
题目描述请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。测试样例:"aeiou"返回:True"BarackObama"返回:
2017-04-25 17:33:57 623
原创 剑指offer(C++)——矩阵覆盖
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?思路:第一个2*1的小矩阵有两种覆盖方法:一种是竖着放,此时总的覆盖方法等于剩下的n-1个2*1的大矩形的覆盖方法;另一种是横着放,此时需要另一个2*1的小矩形也必须横着放,此时总的覆盖方法等于剩下的n-2个2*1的大矩形的覆盖方法。总的方
2017-04-24 21:04:28 894
原创 剑指offer(C++)——跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:首先我们考虑最简单的情况。如果只有1级台阶,显然只有一种跳法。如果只有2级台阶,则有两种:一种是一次跳1级,一种是一次跳2级接着考虑一般情况,对于n级台阶,我们记跳法总数为f(n)。当n>2时,第一次跳有两种选择,一种是跳1级台阶,此时跳法数目等于后面剩下的n-1
2017-04-24 20:38:32 1798
原创 剑指offer(C++)——斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n思路:解法1:大家最熟悉的递归解法就不详述了,直接上代码:/*递归解法,时间复杂度很大*/ int Fibonacci(int n) { if (n == 0) return 0; if(n==1) return
2017-04-24 20:03:35 944
原创 剑指offer(C++)——二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路分析:解法1:如果不考虑时间效率,使用除法,依次统计二进制中1的个数/*时间复杂度大,效率低,只能处理正数,不能处理负数*/ int NumberOf(int n) { int count = 0; while (n) { if (n % 2 == 1) cou
2017-04-24 08:50:04 1443
原创 剑指offer(C++)——旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路分析:最直观的解法就是从头到尾遍历一遍数组,找出最小数字。时间复杂度
2017-04-23 21:23:08 1248
原创 位操作
位操作1 最有效的计算一个数x乘以2的n次方的方法虽然直接进行乘法操作符运算可以进行x乘以2的n次方,但该方法不是最优的,通过移位方法会比较高效,因为CPU直接支持位运算,效率最高。x将一个数左移n位,相当于乘以了2的n次方。例如:2引申:如何快速求取一个整数x的7倍?(x相当于将此整数乘以8,然后再减去原值,就得到了x的7倍。2 如何实
2017-04-23 21:07:49 536
原创 剑指offer(C++)——用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:(1)插入:我们知道栈是一个“先进后出”的数据结构,而队列是一个“先进先出”的数据结构。现在要求用两个“先进后出”的栈来实现一个“先进先出”的队列。现在我们通过一个具体实例来分析如何实现。首先插入一个元素a,不妨先把它插入到stack1中,此时stack1中只有{a}。接着在插
2017-04-22 11:24:45 1340
原创 剑指offer(C++)——重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:根据前序遍历的特点,第一个数字1就是根结点。扫描中序遍历序列,就可以确定根结点的位置。根据中序遍历的特点,根结点1前面的3个数都是左子
2017-04-22 11:02:58 538
原创 剑指offer(C++)——从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。思路:(1)由于链表只能从头到尾进行遍历,于是我们就想如果能把链表的指针翻转过来,我们就可以实现从尾到头的输出了。但是这里有个问题,就是我们这样做会改变原始链表的结构。如果没有要求说不能改变链表的结构,那么我们就可以采用头插法来实现翻转链表。(2)如果要求不能改变原始链表结构怎么办呢?在遍历链表的时候,我们可以借用
2017-04-21 20:48:56 998
原创 剑指offer(C++)——替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:简单暴力解法,从头到尾遍历字符串,碰到空格,首先将后面的所有字符串往后移动2个字符,才能空出3个字符位子插入字符“%20”,对于一个长度为n的字符串,对每个空格,需要移动后面O(n)个字符,因此包含n个空格的字符串,
2017-04-21 17:08:47 2297
原创 剑指offer(C++)——二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数思路:二维数组中查找是否包含某个整数,直接的做法就是进行暴力搜索,但是这样做的时间复杂度为O(n*n),效率很低。而且也没有充分利用本题中二维数组递增的特点。根据数组递增的特点,我们会发现如下规律:首先选取数组中
2017-04-21 15:15:02 472
原创 数据结构与算法(C++)——二叉树的遍历
二叉树的遍历二叉树是一种重要的数据结构。遍历方式有前序遍历、中序遍历、后续遍历以及层次遍历。对于前序、中序和后续遍历,采用递归的思想代码实现起来简单且容易理解,非递归实现需要用到辅助栈。层次遍历需要用到辅助队列来实现。一、前序遍历前序遍历是按照:根结点-左结点-有结点 顺序访问。递归代码实现: /*二叉树前序遍历递归实现*/ void preOrder(BinaryTre
2017-04-21 10:31:25 1064
原创 剑指offer(C++)——机器人的运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路:类似于面试题66,,详细可
2017-04-20 20:23:50 1771
原创 C++实现简单的走迷宫
c++实现简单走迷宫用n*n个小方格代表迷宫,每个方格上有一个字符0或1,0代表这个格子不能走,1代表这个格子可以走。只能一个格子一个走,而且只能从一个格子向它的上、下、左、右四个方向走,且不能重复。迷宫的入口和出口分别位于左上角和右下角,存在唯一的一条路径能够从入口到达出口,试着找出这条路径。例如,下图是一个迷宫,红色表示走出迷宫的一条路径输入:入
2017-04-20 19:29:16 11980 3
原创 剑指offer(C++)——矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如[a b c e s f c s a d e e]是3*4矩阵,其包含字符串"bcced"的路径,但是矩阵中不包含“abcb”路径,因为字符串的第一
2017-04-20 15:05:54 2408
原创 剑指offer(C++)——滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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],
2017-04-20 11:14:38 3306
原创 sizeof和strlen的区别比较
strlen()和sizeof()的区别strlen是一个函数,起到计数器的作用。它从内存的某个位置开始扫描,直到碰到第一个字符串结束符 '\0'为止,然后返回计数器值;sizeof是关键字,它以字节的形式给出其操作数的存储大小,操作数可以是表达式或括在括号里的类型名,存储大小有操作数类型决定;具体表现如下:sizeof是关键字,strlen是函数。sizeof后如果是类型必须
2017-04-20 10:04:41 632
原创 C/C++中的语言类型
C/C++ 语言中的语言类型一共有5种:表达式语句函数调用语句控制语句: if语句、switch语句(条件判断语句);do while语句、while语句、for语句(循环执行语句);break语句、continue语句、return语句、goto语句(转向语句)复合语句空语句注意:预处理指令不是语句
2017-04-20 09:38:29 764
原创 剑指offer(C++)——数据流中的中位数
题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。思路:由于数据是从数据流中读取出来的,数据的个数随着时间的变化而增加。因此我们需要一个数据容器来保存读取出来的数据。解法1:用数组来保存数据。如果数组无序,则找到中位数最优的算法时间
2017-04-19 19:02:45 2681
原创 STL——Heap算法
STL——heap算法1、就排序而言,heap是一种特别的元素组织方式,应用于heap排序法(heapsort)。Heap可被视为一个以序列式集合实现而成的二叉树,具有两大性质:(1)第一个元素总是最大。(2)总是能够在对数时间内增加或移除一个元素。2、STL中提供了4个算法:默认的排序准则是 operator(1)make_heap():将某个区间内的元素转化
2017-04-19 17:08:45 599
原创 C/C++ 取整函数ceil(),floor()
使用floor函数:floor(x)返回的是小于或等于x的最大整数。如: floor(10.5) == 10 floor(-10.5) == -11使用ceil函数:ceil(x)返回的是大于x的最小整数。如: ceil(10.5) == 11 ceil(-10.5) ==-10 floor()是向负无穷大舍入,floor(-10.5) =
2017-04-19 14:15:40 741
原创 new/delete与malloc/free的区别是什么
相同点:C++中,申请动态内存和释放动态内存,两者都可以,且存储方式一样,申请的内存都在堆中,无法被操作系统自动回收不同点:(1)malloc/free是c/c++语言的标准库函数;new/delete是c++的运算符(2)对于类对象而言,malloc/free无法满足动态类对象的要求具体如下:a、new能够自动计算需要分配的内存空间,而malloc需要手工计算字节数;
2017-04-19 10:51:09 338
原创 剑指offer(C++)——二叉搜索树的第k个结点
题目描述给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 按结点数值大小顺序第三个结点的值为4。思路:根据二叉搜索树的特点,中序遍历的数值是递增排序的,因此,只需中序遍历二叉搜索树就能找到第k大结点。如上面的二叉树,中序遍历结果为 {2,3,4,5,6,7,8},第三个结点的值为4/*思路:根据二叉搜索树的特点,中序遍
2017-04-19 10:39:03 1349
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人