自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 【二叉树问题】非递归进行二叉树的前序、中序、后序遍历

目录非递归实现二叉树的前序遍历非递归实现二叉树的中序遍历非递归实现二叉树的后序遍历代码实现用非递归方法进行二叉树的前序、中序、后序遍历,要对从上到下遍历过的节点进行存储,再根据相关条件循环限制输出,因此要用到额外数据结构——栈,栈弹出元素的顺序即为对应的遍历顺序非递归实现二叉树的前序遍历1、将根节点压入栈中2、栈不为空时,弹出栈顶元素temp,如果temp的右子树节...

2018-12-31 14:30:38 232

原创 【二叉树问题】递归实现链表的前序、中序、后序遍历

无论是递归方法还是非递归方法,时间复杂度为O(N),N为二叉树节点个数。额外空间复杂度为O(L),L为二叉树的层数。递归方法实现前序、中序、后序遍历注意vector<int>result进行引用传递的做法: 引用传递方法1:void DLR(vector<int> & result2){...//此函数修改result2,主函数中result会...

2018-12-31 11:09:35 391

原创 【链表问题】复杂链表(带random指针)的复制

题目设链表的结构为struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x), next(NULL), random(NULL) { }};其中random 指针可指向链表中任...

2018-12-30 21:24:47 278

原创 【链表问题】判断单向链表是否相交

题目给定两个单链表的头节点head1和head2,如何判断两个链表是否相交?相交的话返回true,不想交的话返回false。给定两个链表的头结点head1和head2,请返回一个bool值代表它们是否相交。思路重点是要把有环和无环的情况都想到。参考:【链表问题】判断有环单链表是否相交、【链表问题】判断无环单链表是否相交、【链表问题】单向链表判断是否有环、求入环节点、求环长、...

2018-12-30 19:28:08 136

原创 【链表问题】判断有环单链表是否相交

题目给定两个有环单链表,判断两个链表是否相交,如果相交返回true,不相交返回false思路两个有环单链表我们能求出各自的入环节点。(1)入环节点相同,两个链表一定相交(入环节点相同,next指针指向的值一定相同)(2)入环节点不同,判断是下面哪一种情况和求入环节点博客中已经介绍过单向链表求入环节点,将返回值改为指向节点类型的指针即可。代码实现/*struc...

2018-12-30 17:07:45 237

原创 【链表问题】判断无环单链表是否相交

目录 题目思路哈希表判断两链表是否相交根据链表相交性质判断题目现在有两个无环单链表,若两个链表的长度分别为m和n,判断这两个链表是否相交。给定两个链表的头结点headA和headB,请返回一个bool值,代表这两个链表是否相交。保证两个链表长度小于等于500。思路首先明确,两个链表相交是指从某个节点开始,存储的下一个节点的地址相同。相交的结点即为公共节点,这...

2018-12-30 13:45:12 268

原创 【链表问题】单向链表判断是否有环、求入环节点、求环长、求链表长度

目录 题目:思路:代码实现注意点此题的其他变式题目判断一个单项链表是否有环,如果有环,返回入环节点的值,如果无环,返回-1.要求空间复杂度为O(1).思路空间复杂度如果没有要求, 可以用哈希表来判断。在空间复杂度为O(1)的情况下,环状链表相关问题通常用快慢指针来辅助完成。快指针从头节点开始一次走两步,慢指针从头节点开始一次走一步。如果快指针为空或者...

2018-12-30 11:21:59 492

原创 【经典动态规划问题】字符串编辑最小代价问题

目录 题目分析状态边界值讨论一般情况讨论代码实现题目字符串A编辑成字符串B可有三种操作: 插入、删除、修改,对应的代价为c0,c1,c2,给出字符串A和字符串B以及各自长度m、n,返回字符串A编辑成字符串B的最小代价。分析状态dp[i][j]表示A[0,...i-1]编辑为B[0,...j-1]需要的代价,i,j指的是当前A、B中的字符个数边界值...

2018-12-25 16:37:14 1945

原创 【经典动态规划问题】0-1背包问题

0,1背包问题一个背包有一定的承重cap,有N件物品,每件都有自己的价值,记录在数组v中,也都有自己的重量,记录在数组w中,每件物品只能选择要装入背包还是不装入背包,要求在不超过背包承重的前提下,选出物品的总价值最大。每个物品只有1个,给定物品的重量w价值v及物品数n和承重cap。请返回最大总价值。状态:dp[i][j]  存储物品0,...i存储到承重为j的背包中的最大价值边界讨...

2018-12-25 15:39:44 493

原创 【经典动态规划问题】最长公共子序列LCS

目录题目题目分析状态边界值讨论其他情况讨论代码实现从题目出发分析如何用动态规划求解最长公共子序列问题题目给定两个字符串A和B,返回两个字符串的最长公共子序列的长度。例如,A="1A2C3D4B56”,B="B1D23CA45B6A”,”123456"或者"12C4B6"都是最长公共子序列。给定两个字符串A和B,同时给定两个串的长度n和m,请返回最长公共子序列...

2018-12-25 13:04:49 180

原创 【经典动态规划问题】最长上升子序列 LIS

目录 最长上升子序列:O(N^2)动态规划:O(N*logN):贪心+二分最长上升子序列:一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < i...

2018-12-25 11:24:28 306

原创 【经典动态规划问题】矩阵最小路径和问题

题目内容:有一个矩阵map,它每个格子有一个权值。从左上角的格子开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。给定一个矩阵map及它的行数n和列数m,请返回最小路径和。保证行列数均小于等于100.测试样例:[[1,2,3],[1,1,1]],2,3返回:4思路:1、找状态,dp[i][j]表示到达...

2018-12-24 22:33:29 4668 2

原创 【经典动态规划问题】—走楼梯

动态规划的关键点:1、找状态,找出能代表状态的元素作为矩阵下标2、找到状态间的依赖关系,从最简单的情况依次计算3、复杂的问题求dp[i][j]可能要考虑多种情况。动态规划应用中非常经典的走楼梯问题:有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。为了防止溢出,请将结果Mod 1000000007给定一个正整数int n,请返回一个数,代表上楼的方式数。保...

2018-12-24 21:50:54 574

原创 face++ 算法实习生 面试复盘

两周前去face++面试人脸识别组算法实习生,技术面没过被刷掉了(虽然聊得比较开心)打仗都是越打越顺的,重要的是需要复盘、总结、进而查漏补缺, 才能收割offer啊!因为岗位要求熟悉python语言以及熟练使用scikit-learn、numpy等库函数。于是在准备算法题的同时我把numpy库和scikit-learn中的比较重要的函数过了一遍。流程:1、进门在前台登记,等面试官提...

2018-12-24 20:19:48 723

原创 一道题看懂如何解决动态规划问题并优化(找零钱问题)

目录找零钱问题:最简单的:暴力搜索针对冗余计算的进一步优化:记忆化搜索进一步优化:动态规划动态规划的简化: 去掉枚举过程,简化动态规划方程总结文章内容来自对牛客网左神课程的整理。很多同学(包括今天之前的我)都认为动态规划很难,其实很大程度上是因为不知道动态规划是怎么从其他算法一步步优化演变来的,上来就介绍动态规划的方法论,难免接受度比较低。“输出是最好的学习方法...

2018-12-24 11:22:13 620

原创 三种方法判断链表是否为回文结构

判断链表是否是回文结构:如1->2->3->2->1则是回文结构目录方法1:时间复杂度O(n),空间复杂度O(N),使用N个额外空间 最简单方法2:时间复杂度O(n),空间复杂度O(N),使用N/2个额外空间方法3:时间复杂度O(n),空间复杂度O(1),最优解方法1:时间复杂度O(n),空间复杂度O(N),使用N个额外空间 最简单将链表元素压入栈,...

2018-12-22 21:36:53 712

原创 【牛客算法笔试面试精讲笔记】单链表删除特定元素

题目要求:现在有一个单链表。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉。给定一个单链表的头结点head,同时给定一个值val,请返回清除后的链表的头结点,保证链表中有不等于该值的其它值。请保证其他元素的相对顺序。测试样例:{1,2,3,4,3,2,1},2{1,3,4,3,1}注意事项:要注意不同情况的处理:头结点为空,头结点为待删除...

2018-12-22 10:18:57 341

原创 求两链表公共元素问题

题目要求:有两升序链表,给定两个链表的头指针headA和headB,请返回一个vector,元素为两个链表的公共部分。请保证返回数组的升序。两个链表的元素个数均小于等于500。保证一定有公共值。思路:遍历两个链表,当A元素比B元素小时,headA 向后移一个位置;A元素比B元素大时,headB向后移一个位置。相等时将元素记录到vector中。headA和headB 有一个为空时,跳...

2018-12-21 09:37:15 395

原创 链表分化问题

链表分化问题为给定一个阈值,使得小于等于这个阈值的结点移到前面,大于这个阈值的结点移到后面,同时保证两类结点的内部位置关系不变。思路一:把链表元素放到数组中,利用快排思想进行排序,类似荷兰国旗问题,但因为涉及到交换,不能保证同一类结点内部位置关系不变。思路二:将小于等于这个阈值的结点生成一个链表,大于这个阈值的结点生成一个链表,最后将两个链表连在一起即可。注意事项:1、每个链表保存...

2018-12-21 09:23:26 173

原创 【牛客算法笔试面试精讲笔记】链表问题

链表问题是常考知识点之一,在笔试面试题中在算法上不会有太大难度,主要注意以下几点:1、指针涉及很多操作,容易考虑不周,着重考察面试者代码实现能力和不出错能力。。2、链表和数组都是线性结构,数组是物理地址连续的一段存储空间,可以通过访问数组下标获得元素。而链表和数组最大的区别在于,链表的存储空间是临时分配的,单链表只能通过next指针获得下一个结点的位置,要想找到第i个元素,只能从头部一个个...

2018-12-20 15:01:19 290

原创 【死磕算法·栈与队列】如何用双栈实现队列操作?

题目要求:编写一个类,只能用两个栈结构实现队列,支持队列的基本操作add(),poll(),peek()题目思路:栈是先进后出,队列是先进先出。用两个栈可以将顺序反过来,实现队列操作设置两个栈stackPush(压入栈)和stackPop(弹出栈),一个只进行push操作,一个只进行pop操作。将stackPush中的值都倒入到stackPop中,再从stackPop中弹出就是...

2018-12-17 15:01:02 108

原创 【死磕算法·栈和队列】用双端队列求解滑动窗口问题

题目要求:有一个整型数组 arr 和一个大小为 w 的窗口,从数组的最左边滑到最右边,窗口每次向右边滑一个位置。 返回一个长度为n-w+1的数组res,res[i]表示每一种窗口状态下的最大值。以数组为[4,3,5,4,3,3,6,7],w=3为例。因为第一个窗口[4,3,5]的最大值为5,第二个窗口[3,5,4]的最大值为5,第三个窗口[5,4,3]的最大值为5。第四个窗口[4,3,3]...

2018-12-17 13:07:30 374

转载 vector作为参数的三种传参方式

vector作为参数的三种传参方式c++中常用的vector容器作为参数时,有三种传参方式,分别如下function1(std::vector<std::vector<int> > vec),传值 function2(std::vector<std::vector<int> >& vec),传引用 function3(std::v...

2018-12-16 22:06:04 607

原创 【死磕算法·栈和队列】双栈排序问题

题目要求:一个栈中元素类型为整型,现在想将该栈自顶到底从大到小排序(vector中第一个元素为栈顶),只能申请一个栈,除此之外可以申请新的变量,但不能申请额外的数据结构,如何完成排序?思路:记原来的栈为stack,申请的辅助栈为help,设置help自顶到底从小到大排序,即可将help倒入stack中,实现stack自顶到底从大到小排序。从stack中弹出栈顶元素,记为current。...

2018-12-16 21:03:42 136

原创 【死磕算法·栈和队列】仅用递归实现栈的逆序

题目要求:实现栈的逆序,但只能用递归函数和这个栈本身操作来实现,不能自己申请额外的数据结构。题目思路:实现两个递归函数: getBottomItem():移除栈底元素并返回该元素reverse():实现整个栈逆序 如何写递归函数?递归函数在函数体中调用自己,对不同的值进行重复操作。递归函数三要素:1、要有可以退出函数的情况;2、递归过程中将一个问题简化到更小...

2018-12-16 20:05:27 202

原创 【死磕算法·栈和队列】如何实时查询栈中最小值

题目大意:实现一个特殊的栈,在实现栈的基本功能的基础上,实现返回栈中最小元素的操作getmin()要求:设计的栈类型可以使用现成的栈结构,其中 pop()、push()、getMin()操作的时间复杂度为O(1)题目思路(涉及到栈操作):方法一:1、设置两个同步操作的栈 stackData,stackMin。stackData进行正常栈操作,stackMin存储每一步操作后的最小值...

2018-12-16 15:45:47 216

原创 【死磕算法·字符串问题】字符串括号匹配问题

题目大意:给定一个字符串,判定字符串是否是括号的有效组合。如“(())”返回true;“)))((("返回false;思路:1、维护变量num,表示当前已经遍历的部分字符串中‘(’和')'数量的差值2、遍历遇到左括号,num++;3、遍历遇到右括号,num--;4、在遍历过程中,如果num<0,说明当前右括号的个数超过了左括号的个数,返回false5、遍历完成...

2018-12-16 10:56:59 513

原创 【死磕算法·字符串问题】空格替换

题目大意:给定字符串str,将字符串内所有空格更换为“%20”。假设str后面有足够的空间容纳替换后的字符串。思路:1、遍历字符串得到空格个数n,进而得到替换后的字符串长度。如原字符串长度为l,替换后的字符串长度为l+2*n2、替换后的字符串最后一个索引是l+2*n-1,从右往左赋值新字符串。如class Replacement {public: strin...

2018-12-16 10:23:19 124

原创 【死磕算法·字符串问题】最长无重复子串问题

题目大意:给定一个字符串str,求该字符串中的最长无重复子串的长度。如“abcd”的最长无重复子串是“abcd”,长度为4;“abcb”的最长无重复子串是“abc”,长度为3。题目思路:遍历字符串,表示出以每个字符串元素str[i]为结尾的最长无重复子串长度,遍历完成后求最大值即可。 如何求以str[i]为结尾的最长无重复子串长度呢?1、得到以str[i-1]为结尾的最长...

2018-12-16 09:58:44 409

原创 【死磕算法】旋转字符串判断·kmp算法应用

旋转字符串:某字符串str1的前面任意几个连续字符移动到str1字符串的后面,形成新的字符串str2,str2即为str1的旋转字符串。如“1234”的旋转字符串有“1234”、“2341”、“3412”、“4123”。现给定两个字符串str1,str2,判断str2是str1的旋转字符串。思路:1、首先判断str1和str2的字符串长度是否相等,若不等,返回false;若相等,继...

2018-12-15 15:01:32 171

原创 【死磕算法·字符串问题】字符串拼接结果最小字典序问题

题目大意:给定字符串类型数组strs,找出一种拼接顺序来拼接str中的字符串,使得最终生成的大字符串字典序最小,并返回该大字符串。如"ba”、“b”可以拼接为“bba”和“bab”,两者相比“bab”字典序更小,因此返回“bab”题目思路:这道题目实质上是一种排序问题。以下是备选的几种方案:1、给出所有可能的拼接方式,遍历求最小。太暴力了 ...不约不约,时间复杂度为O(...

2018-12-15 14:32:28 663

原创 【死磕算法·字符串问题】字符串移动问题

题目大意:给定一个字符串str和整数i,i代表str中的位置,将str[0,...i]移到str的右侧,str[i+1,...length-1]移动到str的左侧。如“ABCDE”,i =2,变化结果为“DEABC”要求:时间复杂度为O(N),空间复杂度为O(1)之前一篇博客提到如何判断字符串str2是字符串str1的旋转字符串。本题也可以采用将str拼接之后,按照i取子串的方法,...

2018-12-15 11:39:49 722

原创 【死磕算法·字符串问题】字符串单词间逆序

题目大意:给定字符串表示的句子,在单词间做逆序调整。单词内部字符次序不变。如“cat loves dog” 变化结果为“dog loves cat”思路:1、实现字符串内部任意区间内所有字符逆序的函数f2、用f处理整个字符串为“god sevol tac”3、找到逆序大字符串中每一个单词的区域,通过f对每一个单词逆序处理为“dog loves cat”代码实现:cl...

2018-12-15 11:36:52 604

原创 死磕算法·字符串问题】判断A中是否存在一棵子树与B树的拓扑结构完全相同·kmp算法应用

题目大意:对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。给定两棵二叉树的头结点A和B,请返回一个bool值,代表A中是否存在一棵同构于B的子树。许多题目可以转化为字符串类型题目进行求解。此题判断A中是否有一棵拓扑结构和B相同的子树,可以遍历两棵树为两个字符串(这里遍历和普通前序/中序/后序遍历不同),再用KMP算法进行判断即可。kmp算...

2018-12-14 20:34:09 342

原创 【人人都是Pythoner】【超全】python的collections模块详解

前言:python中内置容器包括list、dict、set、tuple,而python中的collections模块则另引入了五种数据结构,更好地满足编码需求。下文验证数据类型方法用到的代码放在了我的github上,欢迎下载:AdvancingMsCat的githubcollections 是python内部的集合模块,内置以下几种数据类型:1、namedtuple(‘name’, [...

2018-12-09 20:28:29 707

原创 【死磕算法之1刷leetcode】954. Array of Doubled Pairs

题目是周赛的第二题,难度中等。题目描述:Given an array of integers A with even length, return true if and only if it is possible to reorder it such that A[2 * i + 1] = 2 * A[2 * i] for every 0 <= i < len(A) / 2....

2018-12-09 16:03:05 287

原创 【死磕算法之1刷leetcode】——324 Wiggle Sort摆动序列2

题目描述Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]…Example:Example 1:Input: nums = [1, 5, 1, 1, 6, 4]Output: One possible answer is [1, 4, 1, 5,...

2018-12-06 18:08:52 182

原创 【死磕算法之1刷leetcode】——376 Wiggle Sort摆动序列

题目描述:Given an unsorted array nums, reorder it in-place such thatnums[0] <= nums[1] >= nums[2] <= nums[3]…Example:Given nums = [3, 5, 2, 1, 6, 4], one possible answer is [1, 6, 2, 5, 3, 4]...

2018-12-06 12:17:51 125

原创 【死磕算法之1刷Leetcode】——找出两个有序数组的中位数【Median of Two Sorted Arrays】O(log(m+n))

Median of Two Sorted Arrays题目标签:hard题目要求:There are two sorted arrays nums1 and nums2 of size m and n respectively.Find the median of the two sorted arrays. The overall run time complexity should b...

2018-12-05 20:39:26 255

原创 【人人都是Pythoner】——python3中“变革”了的除号

今天写python时候发现python3关于除法的默认设定——浮点除法环境:python3.6代码行:print (3/2)print (2/2)print ((3-1)/2)print ((int)(3-1)/2)输出:1.51.01.01.0也就是说,python3中无论‘\’运算符对应的除数与被除数是什么类型,结果都为浮点数。那么python3中如何在除法中...

2018-12-05 12:51:28 465

空空如也

空空如也

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

TA关注的人

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