自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Brett

学生

  • 博客(143)
  • 收藏
  • 关注

原创 堆排序图文详解

基础知识堆结构是完全二叉树的结构,即从根节点到倒数最二层满足每个根节点都有两个子节点,最后一层可以不完全填充,但是叶子节点必须靠左对齐。在程序中是用数组来表示一个堆,若根节点在数组中的下标为index,则满足以下关系:左子节点的下标left = 2*index+1,右子节点下标right= 2*index+2;若当前节点的下标为index,则其父节点的下标为(index-1)/2。...

2019-09-18 22:41:21 472

原创 [剑指offer]24、二叉树中和为某一值的路径

题目描述输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。分析:1、因为要包含所有可能的路径,因此返回的结果res为二维数组,用一维数组path保存满足条件的单条路径的结点值2、从根节点开始,若当前结点为null,直接返回res3、若当前结点为叶子结点,且结点的值正好和目标值相等,...

2019-09-01 15:18:32 181

原创 Java HashMap获取值的几种方式

1、通过keySet()方法获取key的集合,由于key不能重复,因此返回的类型是Set类型2、通过entrySet()方法获得键值对,再通过getKey()和getValue()方法获取key和value3、通过values方法获取value集合,因为value可以重复,因此返回的类型为Collectionimport java.util.Collection;import ja...

2019-08-24 22:57:38 16493

原创 Java实例变量初始化时机

实例变量初始化时机Java实例变量的初始化位置初始化时机测试结论Java实例变量的初始化位置Java中可以在声明时、非static代码块中和构造方法中初始化实例变量。初始化时机实际上在声明时初始化或者在非static代码块中初始化实例变量最终都会被代码书写顺序移到构造方法的开始位置,会优先于构造方法其他初始化语句执行。测试代码1如下:public class testFinal { ...

2019-08-22 18:03:25 872

原创 [剑指offer]23、二叉搜索树的后续遍历

题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。分析:二叉搜素树指的是根节点的左子树的值都比根节点的值小,而右子树的结点的值都比根节点的值大。若给出的是数组是二叉搜索树的后序遍历,则最后一个值为根节点,如下图所示。法一:若是二叉搜索树的后序遍历,从根节点5开始,5前面的数先一直...

2019-08-10 12:44:36 88

原创 [剑指offer]22、从上往下打印二叉树

题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。分析:同层从左至右打印,可以用队列来依次保存每一层的每个节点,并将该结点的值存入数组中;若该结点的左节点或右结点不为空,再将其放入队列,重复上述步骤。Java代码:public class Solution { public ArrayList<Integer> PrintFromTopToBo...

2019-08-06 23:42:46 67

原创 [剑指offer]21、栈的压入弹出序列

题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)分析:可以新建一个栈tmp,根据压入序列进行压入,根据弹出序列依次弹出,如果最...

2019-08-05 23:15:47 104

原创 [剑指offer]20、包含min函数的栈

题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。分析:栈s1用来执行正常的压入弹出操作,栈s2用来存储最小的值。即只有当栈s2为空或者新压入的数据比s2栈顶的元素小时,才将数据压入s2;执行弹出操作时,当s1和s2栈顶元素相同时,才将s2栈顶元素弹出。最后s2栈顶的元素始终为最小值。import java.util.S...

2019-08-03 14:33:25 84

原创 [剑指offer]19、顺时针打印矩阵

题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.分析:顺时针打印,即为依次从左至右,从上至下,从右至左,从下往上。这里需要四个变量left、right、top...

2019-08-02 23:40:01 95

原创 [剑指offer]18、二叉树的镜像

题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5...

2019-07-31 21:51:53 62

原创 [剑指offer]17、树的子结构

题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)分析:主要思路:1、由题目条件可知,两棵树都不能为空,否则直接返回false;2、寻找树A与树B根结点值相等的结点,记为R,判断以树A的R结点为根结点的子树是否包含B树(判断方法是将B树的左右子结点与R结点的左右子结点依次比较,若都相等,则为true);3、若不包含,则依次寻找树A的左子树...

2019-07-31 21:31:19 69

原创 [剑指offer]16、合并两个排序的链表

题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。分析:两个链表都是单调递增的,因此可以将head指向值较小的那个节点,再利用递归方法合并剩下的链表。public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { ...

2019-07-30 22:49:47 64

原创 [剑指offer]15、反转链表

题目描述输入一个链表,反转链表后,输出新链表的表头。分析:若链表为空或长度为1,直接返回。按下图所示,用p1、p2分别指向前两个结点,用p3记录p2的下一个结点,依次反转之后,再将p1、p2移到原来p2、p3的位置,直到p2为null为止,最后返回p1public class Solution { public ListNode ReverseList(ListNo...

2019-07-20 19:58:56 73

原创 [剑指offer]14、链表中倒数第k个结点

题目描述输入一个链表,输出该链表中倒数第k个结点。分析:若链表长度为len,则倒数第k个结点就是正数第(len-k+1)个结点,因此可以先遍历链表一次,求出链表长度,再遍历至(len-k+1)个结点即可。但此做法需要遍历链表两次,可以让p1先走(k-1)个结点,再让p2从头开始,当p1到达链表末尾时,p2所在的位置即为第(len-k+1)个结点,也就是倒数第k个结点。在遍历的时候注意边...

2019-07-09 21:01:20 95

原创 [剑指offer]13、调整数组顺序使奇数位于偶数前面

题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。分析:不改变原始数字之间的相对位置将奇数调整到偶数前面,可以用冒泡法,如果奇数在偶数后面,交换位置即可。class Solution {public: void reOrderArray(vect...

2019-07-06 22:47:46 69

原创 [剑指offer]12、数值的整数次方

题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。分析:由于exponent可能存在正负以及0的情况,因此需分情况讨论,当然前提是base不能为0。class Solution {public: double Power(double base, int exponent) { doub...

2019-07-06 22:23:57 80

原创 [剑指offer]11、二进制中1的个数

题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。分析:当n不为0时,将n与n-1按位与,可将n的二进制数的最右边的1置为0,而1右边的数变为1,按位与之后n的二进制数就会少一个1,重复上述步骤,直到n为0为止,进行按位与的次数即为1的个数。class Solution {public: int NumberOf1(int n) { ...

2019-07-04 22:36:15 75

原创 [剑指offer]10、矩形覆盖

题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?分析:n为1时,有1种方法;n为2时,有2种方法;n>2时,当第一块矩形竖着放时,则有f(n-1)种方法,当第一块矩形横着放时,则下面一块的位置也已经确定,则共有f(n-2)种方法,因此f(n)=f(n-1)+f(n-2),也是斐波那契数列。...

2019-06-16 19:18:32 78

原创 设计模式之单例模式

一、定义确保一个类只有一个实例,自行实例化并向整个系统提供这个实例。单例模式的主要特点是构造函数为私有,因此外界不能通过构造函数实例化对象。由于构造函数为私有,因此该类不能被继承。二、分类1、饿汉式:类加载时就进行对象实例化,代码如下:public class Singleton { private static Singleton m_instance = new Si...

2019-06-13 17:06:59 105

原创 [剑指offer]9、变态跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析:记f(n)为跳n级台阶的总跳法数,当n>1时,若第一次跳1级,则还剩n-1级台阶,有f(n-1)种跳法;若第一次跳2级,则还剩n-2级台阶,有f(n-2)种跳法......以此类推,若第一次跳n-1级,还剩1级台阶,有f(1)种跳法;若第一次跳n级,即为1种...

2019-06-10 23:12:36 67

原创 [剑指offer]8、跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。分析:n为1时,有1种跳法;n为2时有2种跳法;n为3时,可以从第1级台阶直接跳,也可以从第2级台阶直接跳,而跳到第1级和跳到第二级各有1和2种方法,所以n为3时有3种跳法。由此可知,有n级台阶时,跳法等于到n-1和n-2台阶的跳法之和,即,求法和斐波那契数列类...

2019-06-09 21:33:13 74

原创 [剑指offer]6、旋转数组的最小数字

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。分析:法一:因为原数组是非降序排列,所以依次遍历数组,若后面的数字比前一个数小,即为整个数组最小,否则数...

2019-06-06 18:13:22 65

原创 [剑指offer]4、重建二叉树

题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。分析:根据前序遍历可知第一位元素为根节点,接着遍历中序遍历序列,值与前序遍历序列的第一个值相等的即为根节点,记中序遍历中根节点的下标为pivo...

2019-06-01 19:17:06 92

原创 [剑指offer]5、用两个栈实现队列

题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。分析:栈是先进后出,而队列是先进先出。可以用两个栈实现队列的Push和Pop操作。栈s1用来记录Push的值,而因为Pop要取出最先压入的值,因此若栈s2为空时,将s1中的值从上至下依次压入s2中,此时s2中栈顶元素即为最先压入s1中的值。C++代码:class Solution{...

2019-05-30 23:44:48 65

原创 [剑指offer]3、从头到尾打印链表

题目描述:输入一个链表,按链表值从尾到头的顺序返回。分析:从头结点开始,依次把每个结点所对应的值进入vector的开头即可。C++代码:class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { vector<int>res; ...

2019-05-28 23:18:53 101

原创 java final关键字的一些理解

一、修饰变量final修饰的变量必须初始化,且一旦初始化后不能再被修改,下面是初始化时机的具体分析:1、修饰成员变量不管是类变量(有static)还是实例变量(无static),可以在声明的时候就初始化。对于类变量来说,可以在类中声明final类变量,在类代码块中初始化,如下图所示。这是因为在类中声明定义类变量,编译器会将该代码移入类代码块中的相应位置;对于实例变量也类似,不过将类代码...

2019-05-24 16:57:39 7370 1

原创 [剑指offer]7、斐波那契数列(三种方法)

题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39法一:可以容易得到推导公式:,递归可求,时间复杂度为,不推荐此法。法二:根据公式,可以用F1记录F(n-2),F2记录F(n-1),依次相加,并更新F1和F2的值即可,时间复杂度为,代码如下:int Fibonacci(int n) { ...

2019-05-11 23:35:02 141

原创 时间复杂度O(logn)求m的n次方

题目描述:自定义函数求正整数m的n次方。分析:一种方法是将m循环相乘n次,时间复杂度为O(n)。下面介绍一种O(logn)的解法。第一步:将n用二进制表示,例如10的二进制为1010。第二步:根据n的二进制的位数求解。如10的二进制位数为4,循环四次,可依次求出,,,,再根据n的二进制哪些位为1再乘以相应的m次幂,即*。这样循环的次数即为n的二进制位数,代码如下:lon...

2019-05-11 20:50:17 2608

原创 [剑指offer]2、替换空格

题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。分析:要将空格替换成“%20”,先计算空格的个数,然后得出新的字符串的长度,利用两个指针p1,p2,p1指向字符串原来末尾位置,p2指向新的末尾位置。若原字符串不为空格,直接更新,否则从后往前依次赋为‘0’‘2’‘%’。...

2019-05-09 21:51:31 68

原创 [剑指offer]1、二维数组中的查找

题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析:法一:一种方法将每行每列元素的值与目标值比较,相等返回true,遍历完还没有相等的返回false。bool Find(int target, vector<vector&...

2019-05-09 21:44:15 111

原创 字符串最长连续子串

题目:求给定字符串中连续出现次数最多的子串。例:abcbcbcabc,bc出现次数最多,为3次分析:1、将后缀数组依次存入字符串数组中2、依次将第i个字符串的长度为j-i的子串与第j个字符串相比,若相等,则比较j字符串剩下有几个子串与之相等3、记录每个子串出现的次数,并比较,保留最大的pair<int, string> fun(const string &am...

2019-04-21 19:09:14 3074

原创 C++/C中16/32/64位机器下int、指针等不同类型所占字节数

各个类型的变量长度由编译器来决定,以主流编译器gcc为例类型 16位(字节) 32位(字节) 64位(字节) char 1 1 1 short 2 2 2 int 2 4 4 unsigned int 2 4 4 float 4 4 4 double 8...

2019-04-09 16:23:17 1372

原创 几种排序算法的C++实现

一、复杂度比较类别 排序方法 时间复杂度 空间复杂度 稳定性 平均情况 最好情况 最坏情况 插入 排序 直接插入 稳定 shell排序 不稳定 选择 排序 简单选择 不稳...

2019-03-20 16:54:01 289

原创 关于VS2017添加lib、dll、头文件指定目录的说明

很多时候我们会调用动态库程序,就会涉及到lib、dll、头文件。一种做法是将三个文件一同拷贝至源文件目录(.exe文件和.cpp文件均可)下,再通过属性页-&gt;链接器-&gt;输入-&gt;附加依赖项中添加需要引用的.lib文件即可。如果引用的文件太多的话,可以不用拷贝直接配置相关目录即可,配置过程如下:1、头文件:属性-&gt;VC++目录-&gt;包含目录(适用于该项目中所有工...

2019-03-06 16:46:43 6747

原创 C++中全局变量的定义以及使用

C++中有时候会用到全局变量,可以用extern来修饰,主要有以下三步:1、新建头文件global.h,里面定义全局变量,并用extern来修饰。2、新建一个cpp文件进行变量初始化。3、在需要使用的cpp文件中添加头文件global.h,直接使用全局变量即可。...

2019-02-24 19:30:16 51960 2

原创 VS C++引用动态库文件注意事项

1、将.lib、.dll、.h文件拷贝至工程和源文件同一目录下;2、在头文件添加引入的新的头文件;3、在属性页-&gt;链接器-&gt;输入-&gt;附加依赖项中添加需要引用的.lib文件。4、若编译仍出现无法解析的外部符号,若提示中的函数名变得很复杂,则可能是C语言和C++语言混编造成的,解决方法是在头文件中定义的部分外部加extern "C"{}。例如:#ifndef _...

2019-02-16 14:17:20 444

原创 [leetcode]557. Reverse Words in a String III

Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.Note: In the string, each word is separated by sin...

2019-02-02 11:06:47 91

原创 [leetcode]551. Student Attendance Record I

You are given a string representing an attendance record for a student. The record only contains the following three characters:'A' : Absent. 'L' : Late. 'P' : Present.A student could be rewarded...

2019-02-01 10:00:38 151

原创 [leetcode]541. Reverse String II

Given a string and an integer k, you need to reverse the first k characters for every 2k characters counting from the start of the string. If there are less than k characters left, reverse all of them...

2019-01-31 18:15:59 126

原创 [leetcode]532. K-diff Pairs in an Array

Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in the array. Here a k-diff pair is defined as an integer pair (i, j), where i and j are both numbers in...

2019-01-31 18:06:31 89

空空如也

空空如也

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

TA关注的人

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