自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 资源 (6)
  • 收藏
  • 关注

原创 和为s的数字

题目一:和为s的两个数字。输入一个递增排序的数组和一个数组s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。例如:输入数组{1,2,4,7,11,15}和数字15,由于4+11=15,因此可以输出4和11。思路: 很熟悉的一道题,注意到这是一个排序数组,要利用好这个信息。首先用两个指针指向首尾的两个元素,将这两个元素的和...

2019-11-30 11:49:31 226

原创 剑指offer——数组中数字出现的次数

题目一:数组中只出现一次的两个数字一个整型数组里除两个数字之外,其他数字都出现了两次,请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度为O(1)。思路: 空间复杂度为O(1),说明要求是就地算法,不能借助辅助空间。时间复杂度要求是不能循环嵌套。我的一个思路是先将数组排序,然后从第一个数字开始一次与后面的数字相比较,如果与后面的数字相同,...

2019-11-30 11:07:08 147

原创 二叉树的深度

题目一:输入一棵二叉树的根节点,求该数的深度。从根节点到叶节点依次经过的节点(含叶、根节点)形成树的一条路径,最长路径的长度为树的深度。思路: 开始想着用DFS遍历每一条路径,同时记录并且更新最大深度,这样做可以求出来,但是这样代码量有点大。换一种思路,如果一棵树只有一个节点,那么它的深度为1,如果它有左右孩子,那么它的深度应该是左右孩子深度的较大值加上1,不论左...

2019-11-29 22:36:48 112

原创 剑指offer——二叉搜索树的第K大节点

题目:给定一棵二叉搜索树,请找出其中第k大的节点。例如,在下图中的二叉搜索树里,按照节点数值大小顺序,第三大节点的值是4。思路: 注意到这是一个二叉搜索树,二叉搜索树的中序遍历就是一个递增的序列,所以这道题就只用中序遍历数组一下,然后找出第k大的值就好了。思路不难,但是代码要多写几遍。代码:struct BinaryTreeNode{ in...

2019-11-29 17:16:09 225

原创 剑指offer——在牌组数组中查找数字

题目一:数字在排序数组中出现的次数统计一个数字在排序数组中出现的次数。例如,输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组出现了4次,因此输出4。思路: 开始的时候,我想着可以用哈希表的方法,一边遍历数组,一边在哈希表中记录出现的次数,时间复杂度是O(N),而且还利用了辅助空间,这种方法并不好。这里可以,考虑二分查找的思路,首先用二分查找找出...

2019-11-26 23:06:12 130

原创 剑指offer——两个链表的第一个公共节点

题目:输入两个链表,找出它们的第一个公共节点。思路: 这道题和今天做的PAT有一题一模一样,PAT里面是给出的具体的节点数据,当时是用结构体来直接作为链表的节点的,没有用到指针,做法是先遍历一个链表,用bool型hashTable将访问过的节点设置为true(初始为false),然后遍历另外一个链表并且查看链表中当前被访问的节点有没有被之前的链表访问过,找出第一个被访问过...

2019-11-26 20:44:59 111

原创 PAT甲级——Hello World for U

Given any string ofN(≥5) characters, you are asked to form the characters into the shape ofU. For example,helloworldcan be printed as:h de ll rlowoThat is, the characters must be prin...

2019-11-26 10:28:22 121

原创 剑指offer——数组中的逆序对

题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求这个数组中的逆序对的总数。例如,在数组{7,5,6,4}中,一共存在5个逆序对,分别是(7,6)、(7,5)、(7,4)、(6,4)和(5,4)。思路: 通过将每个数字和后面的数字比较得到逆序对的总数,时间复杂度是O(n^2),不太能接受如此大的复杂度。我们可以...

2019-11-25 23:16:34 107

原创 剑指offer——第一个只出现一次的字符

题目1:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’思路: 这道题如果一个一个数字去找后面有没有出现这样时间效率是O(n^2),面试肯定通不过,有关出现次数的类型的题可以想到用HashTable来做,时间复杂度为O(n),每次查询的时间为O(1),这是典型的空间换时间的做法。这道题可以建立一个256个元素大小的哈希表,初始化为0,每次读...

2019-11-23 23:36:07 150

原创 剑指offer——丑数

题目:我们把只包含因子2,3,5的数称作丑数(Ugly Number)。求从小到大顺序的第1500个丑数。例如6,8都是丑数,但14不是,因为它包含因子7,习惯上我们把1当做第一个丑数。思路1: 最简单粗暴的思路,就是从1开始找丑数,直到找到第1500个丑数。如果一个数是丑数,那么它被2,3,5中的一个或者几个肯定能够除尽。 代码1: ...

2019-11-23 23:04:12 154

原创 剑指offer——最长不含重复字符的子字符串

题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含‘a’~‘z’的字符。例如,在字符串“arabcacfr”中最长的子字符串为“acfr”,长度为4。思路: 这种题一般都是动态规划的解法,和之前求连续子序列的最大和的思想差不多。首先定义以第i个字符为结尾的不包括重复字符的子字符串的最长长度为f(i),那么如果第i个字符...

2019-11-23 22:16:37 120

原创 剑指offer——礼物的最大价值

题目:在一个mxn的棋盘的每一个格子里面都放有一个礼物,每一个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并且每次向右或者向下移动一格,直到到达棋盘的右下角。给定一个棋盘及上面的礼物,请计算你最多能拿到多少价值的礼物。1 10 3 812 2 9 65 7 4 ...

2019-11-23 21:13:27 147

原创 剑指offer——数字序列中某一位的数字

题目:数字以012345678910111213141516...的格式序列化得到的一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。思路: 如果一个一个数字去列举,然后统计数字的个数,这样来计算第n位对应的数字效率太慢了。所以要善于去发现一些规律,比如要找第1001位数字(题目里面说第五位是5,...

2019-11-22 22:24:03 210

原创 剑指offer——1~n整数中1出现的次数

题目:输入一个整数n,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1的数字偶1,10,11和12这里面1一共出现了5次。思路: 最简单的思路就是枚举所有的数,然后除以10,看余数是不是1,统计每一个数里面包含1的个数再相加起来可以。但是这种做法的时间复杂度为O(nlogn),不太能满足要求。这里可以研究一下数字规律,比如21345为...

2019-11-22 20:54:30 159

原创 PAT甲级——Colors in Mars

People in Mars represent the colors in their computers in a similar way as the Earth people. That is, a color is represented by a 6-digit number, where the first 2 digits are forRed, the middle 2 dig...

2019-11-22 11:04:05 106

原创 剑指offer——把数组排成最小的数

题目:输入一个正整数数组,把数组里面所有的数字拼接起来排成一个数,打印能拼接出的左右数字中最小的一个。例如,输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323。思路: 比如给定两个数字n和m,它们能拼接成nm和mn。如果mn<mn,那么应该打印出mn,反之就打印出nm。注意到拼接出来的数字,虽然顺序不同但是结果的总长度应该是一样的,在...

2019-11-21 23:08:48 126

原创 剑值offer——连续子数组的最大和

题目:输入一个整型数组,数组里面有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如:输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和18。思路: 这道题可以先自己手动计算一下去发现规律,当一个数a前面的子序列的和sum为负数的时候,那么...

2019-11-21 22:00:00 97

原创 剑指offer——数据流中的中位数

题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。思路: 如果数据在容器中已经排好序,数据总数为奇数,那么中位数就是最中间的数,如果数据总数为偶数,中位数就是中间两个数的均值。可以将数据在容器中看为两堆,前面的一部分为大顶堆,后面...

2019-11-20 23:29:41 116

原创 剑指offer——最小的k个数

题目:输入n个整数,找出其中最小的k个数。例如,输入4,5,1,6,2,7,3,8这8个数字,则最小4个数字是1,2,3,4。思路1: 快排前面有一步Partition(即随机取序列里面一个数,把序列分为两个部分,该数左边的数都小于它,该数右边的数都大于它)有很多用途,这里如果找到了序列里下标为k-1的数,并且进行Partition操作,那么这个数左边的数都是小于它...

2019-11-20 19:52:05 73

原创 C++产生随机数

C++如何产生随机数?rand()函数可以返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。#include <iostream>#include<cstdlib>//#include <ctime>using namespace std;int main(){ /...

2019-11-20 16:40:14 253

原创 数组中出现次数超过一半的数字

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如,输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过了数组长度的一半,因此输出2思路: 注意到,数组中有一个数字出现的次数超过了数组长度的一半。如果把这个数组进行排序,那么排序之后位于数组中间的数字一定就是那个出现次数超过数组长度一半的数字。也就是说,这个...

2019-11-19 23:21:08 193

原创 剑指offer——字符串的排列

题目:输入一个字符串,打印出该字符串中字符的所有排列。例如,输入字符串abc,则打印出有字符a、b、c所能排列出来的所有字符串abc、acb、bca、cab和cba。思路: 这道题让我想起来了青蛙跳台阶的问题,看起来比较复杂,实际上可以把复杂问题划分成为一个简单问题。这里可以把序列分为两个部分,第一个数字为一个部分,后面的序列为另一个部分。首先依次将a与后面的b、...

2019-11-19 20:37:04 96

原创 剑指offer——序列化二叉树

声明:本文参考了《剑指offer》一书题目:请实现两个函数,分别用来序列化和反序列化二叉树。上面的二叉树序列化之后为“1,2,4,$,$,$,3,5,$,$,6,$,$”思路: 上面的例子是按照前序遍历的方法来序列化二叉树的,如果节点存在就输出节点的值,如果节点不存在就输出"$"代码1:struct BinaryTreeNode{ int ...

2019-11-18 23:37:15 96

原创 剑指offer——二叉搜索树与双向链表

声明:本文参考了《剑指offer》题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序双向链表。要求不能创建任何新的节点,只能调整树中的节点指针的指向。思路: 按照中序遍历的顺序遍历树,遍历到根节点的时候把树(或者子树)看成三部分,根节点为6的左子树、根节点10、根节点为14的右子树,将10和左子树最大的节点8连接起来,然后将10和右子树的最小节点12连接起来。用...

2019-11-18 22:51:19 84

原创 PAT甲级——General Palindromic Number

A number that will be the same when it is written forwards or backwards is known as aPalindromic Number. For example, 1234321 is a palindromic number. All single digit numbers are palindromic numbers...

2019-11-18 16:16:19 114

原创 剑指offer——复杂链表的复制

题目:请实现函数ComplexListNode* Clone(ComPlexListNode* pHead),复制一个复杂链表。在复杂链表中,每个节点除了有一个m_pNext指针指向下一个节点,还有一个m_pSibling指针指向链表中的任意节点或者nullptr。上图的实线箭头表示m_pNext指针,虚线箭头表示m_pSibling指针思路: 这道题可以先按照节点...

2019-11-17 11:22:36 118

原创 剑值offer面试题34——二叉树中和为某一值的路径

题目:输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。思路: 这道题我想的是用DFS可以解决(之后试着写上代码),书中给的思路是用前序遍历的方式遍历树(因为这样就可以从根节点开始访问树的数据),其实就是从左往右访问树的每一条路径,每经过一个节点就把节点的值相加,并且把该节点的值加入路径,...

2019-11-16 23:23:25 108

原创 剑指offer面试题33——二叉搜索树的后序遍历序列

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。例如,输入数组{5,7,6,9,11,10,8},则返回true,因为这个整数序列是下图所示二叉树的后序遍历结果。如果输入的数组是{7,4,6,5},则没有哪棵二叉搜索树的后序遍历结果是这个序列,因此返回false。思路: ...

2019-11-16 22:47:39 302

原创 剑指offer面试题32——从上到下打印二叉树

题目一:不分行从上到下打印二叉树从上到下打印二叉树的每个节点,同一层的节点按照从左往右的顺序打印。其实就是二叉树的层序遍历。思路: 这道题要求的就是二叉树的层序遍历序列,之前PAT上面做过这样的题,其实就是利用的BFS(广度优先搜索)来做。建立一个队列,将二叉树的根节点先入队,然后输出根节点的值并且将根节点出队,这个时候判断根节点是否有左右子孩子,如果有就按照先左孩子再...

2019-11-16 16:00:37 188

原创 剑指offer面试题31——栈的压入、弹出序列

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5}是某栈的压栈序列,序列{4,5,3,2,1}是该压栈序列对应的一个弹出序列,但{4,3,5,1,2}就不可能是该压栈序列的弹出序列。思路: 这道题我开始都没看懂是什么意思,序列{1,2,3,4,5}压栈之后,出栈不就是{5...

2019-11-15 23:08:50 127

原创 剑指offer面试题30——包含min函数的栈

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。思路: 在栈的结构里面不能实现排序,所以排序的方法行不通。这里的思路还是挺巧妙的,就是建立一个辅助栈,里面存放的第一个元素就是栈的最小值,具体怎么实现可以看下面这个表格:以后要把建立辅助空间来解决问题当做一种常见的思路进行...

2019-11-15 22:09:37 98

原创 PAT甲级——Queueing at Bank

Suppose a bank hasKwindows open for service. There is a yellow line in front of the windows which devides the waiting area into two parts. All the customers have to wait in line behind the yellow li...

2019-11-15 10:54:52 106

原创 剑指offer面试题29——顺时针打印矩阵

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如,如下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出的数字为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,...

2019-11-14 23:17:40 180

原创 剑值offer面试题28——对称的二叉树

题目:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如下图中,第一棵二叉树是对称的,另外两棵不是。思路: 这道题我开始想的是,先求出二叉树的镜像然后进行对比,比较两棵二叉树是否相同。理论上是可行的,但是过程会繁琐一点。书中给了一种思路:先对二叉树进行前序遍历,比如上面第一棵二叉树前序序列为8657675,再自定义一种前序遍历...

2019-11-13 22:49:00 155

原创 剑指offer面试题27——二叉树的镜像

题目:请完成一个函数,输入一棵二叉树,该函数输出它的镜像。思路: 仔细观察上面的图就知道,镜像的意思就是互换节点的左右子节点的位置。那么可以从树的根节点开始,如果含有子节点就将两个节点的位置互换,同时继续对交换之后的两个节点进行检查,如果含有子节点就进行交换。可以看出来用递归的思路能够很好地解决问题。同时要注意特殊的输入情况,比如树的根节点为空,或者二叉树只有一个...

2019-11-13 21:56:12 125

原创 剑指offer面试题26——树的子结构*

题目:输入两棵二叉树A和B,判断B是不是A的子结构。二叉树的节点的定义如下:struct BinaryTreeNode{ double m_dbValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};思路: 这道题涉及到树的遍历,首先我们要在A树中找到与B树根节点值相同的节点,接着...

2019-11-13 19:43:13 91

原创 PAT甲级——Phone Bills

题目描述A long-distance telephone company charges its customers by the following rules:Making a long-distance call costs a certain amount per minute, depending on the time of day when the call is made...

2019-11-13 15:57:21 140

原创 剑指offer面试题25——合并两个排序的链表

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的,如下图所示:思路 : 这道题让我想起了归并排序,归并排序的通常也是通过递归来实现的,思路不难,就是每次比较链表1,2的头节点,选择值小的那一个作为链表3的节点进行连接,还是要注意过程中链表不能出现断裂,还要处理链表为空的情况,这一点很容易被忽略,切记!代码:struct ListNo...

2019-11-12 23:35:14 151

原创 剑指offer面试题24——反转链表

题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。思路: 反转链表本身不难,但是要注意反转的过程中不能出现断裂的情况,比如上图中将节点i反转之后,节点j可能会找不到,那么我们需要事先将j存储下来,这样就不会出现丢失节点的情况。还有就是需要应对链表头节点为空,或者链表只有一个节点的特殊情况,写出对应的处理方法,提高代码的鲁棒性。代...

2019-11-12 23:16:08 126

原创 剑指offer面试题23——链表中环的入口节点

题目:如果一个链表中包含环,如何找出环的入口节点?如下图所示,环的入口节点是3思路: 这道题的思路还是很巧妙的, 首先要去判断链表里面有没有环的存在。这里定义两个指针,同时从链表的头节点出发,一个指针一次走一步,一个指针一次走两步。如果走的块的指针追上了走的慢的指针,那么链表就包含环;如果走的块的指针走到了链表的末尾(m_pNext指向NULL)都没有追上第一个指针,那...

2019-11-12 22:51:59 126

强化学习的资料

关于强化学习的讲解,以PPT的形式出现非常条理化,是了解强化学习的好资料。

2018-05-28

Python学习资料

Python学习从入门到实践的完整资料,通过理论与实践能够快速上手Python!

2018-05-28

人工智能的主要开发平台

介绍了当前使用较为广泛的一些人工智能的主要开发平台

2018-05-23

人工智能之深度学习

深度学习的入门资料,帮助新人更好的了解深度学习的知识。

2018-05-04

人工智能之机器学习

介绍了机器学习的相关知识,是机器学习的入门学习资料。

2018-05-04

人工智能的历史与背景

对人工智能历史与未来的介绍和展望,帮助新人更好的了解人工智能。

2018-05-04

空空如也

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

TA关注的人

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