- 博客(197)
- 收藏
- 关注
原创 剑指offer 16 正则表达式匹配
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配解法:注意题目中说的出现0次,例如ab*aa若*代表出现0次的话,则表示为字符串aaa。分析题目一共...
2018-11-12 10:12:35 397
原创 剑指offer 15 删除链表的节点
题目一:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)的时间内删除该节点解法:O(1)的时间删除单向链表中的一个节点,题目关键在于它给了你一个节点指针,而且这个节点指针指向的 节点就是需要删除的那个节点。基于这个理解,我们就可以在O(1)的时间内删除,假设待删除的节点为i,i的下一个节点为j,我们可以将j的内容复制到i然后将 i->next = j->next即可实现删...
2018-11-12 09:57:58 234
原创 剑指offer 14 数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解法: 首先明确下图的公式 所以我们可以使用递归去求解这个问题,同时要注意当指数为负数时候对结果的影响class Solution {public: double Power(double base, int exponent) { bool flag_of_...
2018-11-12 09:38:17 162
原创 剑指offer 13 二进制中1的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解法:十进制的数表示为二进制的数,当我们将这个数减1 的时候,观察到最右边的一个1会变成0,如果它右边有0的话就全变成了1,类似我们做减法的那种借位,此时我们将减1之后的数与原数进行与运算,因为左边的数并没有改变,因此与运算并没有改变高位的数值,只是将最右边的1变成了0,我们只需要数进行了多少次这样的运算就代表有多少个1.但...
2018-11-05 17:13:04 127
原创 剑指offer 12 剪绳子
题目一:给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]*k[1]*...*k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18解法:每一次我们下刀剪绳子都把绳子分成了两段,一段为i ,一段为n-i,因此我们可以写成如...
2018-11-05 16:46:38 123
原创 剑指offer 11 机器人的运动范围
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子? 解法:类似上一道题,回溯寻找,但是这道题的边界条件...
2018-11-04 16:28:32 99
原创 剑指offer 10 矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字...
2018-10-31 20:20:09 158
原创 剑指offer 9.旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解法:最简单的方法,遍历整个数组,即可找到最小值,但是时间复杂度为O(n),而且没有利用到旋转数组的特性。我们观察到旋转...
2018-10-29 17:15:30 102
原创 剑指offer 8.跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解法:可以看作斐波那契数列的另一种行式,对于n大于2的台阶,它可以从n-1级台阶的方法 中跳1阶 即可到达,也可以从n-2级台阶的方法中跳2阶到达。所以上一个n级台阶的跳法f[n] = f[n-1]+f[n-2].但是注意n=2时候f[n]=2,而不是f[1]+f[0] = 1...
2018-10-24 19:38:41 118
原创 剑指offer 7.斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39解法:可以利用递归调用来写,但是时间和空间消耗大,观察斐波那契数列生成方式,中间一些值是重复计算的,我们可以用vector保存起来,就避免了重复计算。时间复杂度O(n).关于vector的使用:不能直接赋值例如:result[i] = 1;程序编译会报错vector s...
2018-10-24 19:15:31 161
原创 剑指offer 6.用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解法:栈的特性为先进后出,而队列的进出顺序却是先进先出,插入元素时候我们很好理解,就直接入栈就好了,关键是删除元素时候,原本第一个进去的元素应该第一个出来,可是作为栈只能弹出最后一个进入的元素,这个时候我们就需要用到第二个栈stack2,将stack1中的元素挨个弹出然后压入stack2中,这样从stack2中...
2018-10-24 16:50:55 86
原创 剑指offer 5.二叉树的下一个结点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 解法:画出二叉树的结构图和利用具体的例子找出规律如下:1.如果一个子树有右子树,那它的下一个节点就是右子树的最左节点2.如果一个子树没有右子树,它是父节点的左子节点,那它的下一个节点就是父节点3.如果一个节点既没有右子树,它还是父节点的右子节点,那...
2018-10-23 19:44:35 96
原创 剑指offer 4.重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。class Solution {public: TreeNode* reConstructBinaryTree(vector<int> ...
2018-10-22 17:03:39 101
原创 剑指offer 3.从尾到头打印链表
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解法:根据题目要求,我们可以想到栈的特性符合题目要求! class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { std::stack <ListNode*> nodes; ...
2018-10-22 17:01:48 102
原创 剑指offer 2.替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解法: class Solution {public: void replaceSpace(char *str,int length) { if (str == nullptr || length < 0) ...
2018-10-22 16:58:46 100
原创 剑指offer 1.二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解法:可以从上到下从左到右进行遍历,但是只要的时间复杂度就肯定上去了,我们可以画图观察一下题目所说的二维矩阵:首先从矩阵右上角开始查找,如果目标值小于该数字,那么即可删掉该数字所在的列,如果目标值大于该...
2018-10-22 16:55:42 110
原创 LeetCode 122. 买卖股票的最佳时机 II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔...
2018-10-22 16:49:06 107
原创 LeetCode 121. 买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 ...
2018-10-22 16:45:52 97
原创 Leetcode905. 按奇偶排序数组
给定一个非负整数数组 A,返回一个由 A 的所有偶数元素组成的数组,后面跟 A 的所有奇数元素。你可以返回满足此条件的任何数组作为答案。示例:输入:[3,1,2,4]输出:[2,4,3,1]输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。提示: 0<= A.length <= 5000 0<=A[i]&l...
2018-10-22 16:39:10 279
原创 Leetcode15 三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]解法:首先对数组排序...
2018-10-22 16:29:40 135
原创 单词查找(公司笔试题)
题目:单词查找分析:题目限制了字母在词典中只可以上下左右相邻,那就意味着不能左上、右上、左下、右下、那就 比起八个方向的就更加简单。具体实现就深搜呗~具体细节在代码的注释测试样例:5 5 3hello help highp a b h mf h e c po i l l hb g h o nh x c m l // wordfind.cpp: 定义控制台应用程...
2018-09-21 15:05:36 354
原创 Leetcode 26. 删除排序数组中的重复项
解题思路:已经排序好的数组,temp保存的是中间变量用于比较,当找到重复的值用erease()函数进行删除,此时数组的下标已经改变,故用i--调整位置。 原题: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 思考:在循环中对下...
2018-09-20 15:18:46 125
原创 HDOJ 2072 单词数
单词数Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 61852 Accepted Submission(s): 15345Problem Descriptionlily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情...
2018-04-03 16:36:52 164
原创 Python读取xml文件使用Python语言及其应用一书的坑
晚上学习Python读取XML文件,在本书的162页,代码如下:第二行对于文件的读取,使用Pycharm新建的XML文件是不自带.XML后缀名的,编译就会一直报错。修改代码如下:import xml.etree.ElementTree as ETtree = ET.ElementTree(file='test')root = tree.getroot()print(root.tag)for...
2018-03-14 20:50:38 469
原创 Shopping
D - ShoppingTime Limit:1000MS Memory Limit:65536KB 64bit IO Format:%lld & %lluSubmit StatusDescriptionSaya and Kudo go shopping together. You can assume the street as a s
2013-12-16 20:27:17 671
原创 Phone Number
A - Problem A :Phone NumberTime Limit:1000MS Memory Limit:65536KB 64bit IO Format:%lld & %lluSubmit StatusDescriptionWe know that if a phone number A is another phone numbe
2013-12-16 20:26:08 957
原创 面积
面积Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 24 Accepted Submission(s) : 4Font: Times New Roman | Verdana | GeorgiaFont Siz
2013-12-12 20:22:09 1229
原创 货币系统
货币系统Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 11 Accepted Submission(s) : 4Font: Times New Roman | Verdana | GeorgiaFont S
2013-12-09 19:17:26 1335
原创 分组背包
分组背包Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 14 Accepted Submission(s) : 6Font: Times New Roman | Verdana | GeorgiaFont S
2013-12-04 20:53:05 985
原创 取余运算
取余运算Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 6 Accepted Submission(s) : 5Font: Times New Roman | Verdana | GeorgiaFont Si
2013-12-04 20:25:47 780
原创 矩阵旋转
矩阵旋转Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 30 Accepted Submission(s) : 10Font: Times New Roman | Verdana | GeorgiaFont
2013-12-03 21:29:07 676
原创 集合的划分
集合的划分Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 19 Accepted Submission(s) : 7Font: Times New Roman | Verdana | GeorgiaFont
2013-12-02 20:29:11 1000
原创 潜水员
潜水员Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 19 Accepted Submission(s) : 5Font: Times New Roman | Verdana | GeorgiaFont Si
2013-12-02 19:42:15 784
原创 二叉树遍历
二叉树遍历Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 5 Accepted Submission(s) : 4Font: Times New Roman | Verdana | GeorgiaFont S
2013-12-01 20:15:52 701
原创 已知后序遍历和中序遍历求前序遍历
而已知后序遍历和中序遍历求前序遍历的过程差不多,但由于后序遍历是最后才访问根节点的 所以要从后开始搜索,例如上面的例子,后序遍历为 gbdehfca,中序遍历为 dgbaechf 后序遍历中的最后一个元素是根节点,a,然后查找中序中a的位置 把中序遍历分成 dgb a echf,而因为节点个数要对应 后序遍历分为 gbd ehfc a,gbd为左子树,ehfc为右子树,这样又可以递
2013-11-28 19:52:15 2311
原创 求后序遍历
求后序遍历Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 3 Accepted Submission(s) : 2Font: Times New Roman | Verdana | GeorgiaFont S
2013-11-28 19:48:43 668
原创 混合背包
混合背包Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 5 Accepted Submission(s) : 2Font: Times New Roman | Verdana | GeorgiaFont Si
2013-11-27 20:02:37 1440
原创 hanoi双塔
hanoi双塔Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 6 Accepted Submission(s) : 3Font: Times New Roman | Verdana | GeorgiaFont
2013-11-26 21:14:52 893
原创 小球
小球Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 18 Accepted Submission(s) : 5Font: Times New Roman | Verdana | GeorgiaFont Siz
2013-11-26 20:25:07 760
原创 奇怪的电梯
奇怪的电梯Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 9 Accepted Submission(s) : 4Font: Times New Roman | Verdana | GeorgiaFont S
2013-11-25 20:07:40 766
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人