自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

pardon110的博客

分享技术,共同进步

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

原创 golang 递归 栈 生成括号

与序列相关的问题,参数栈+链表+循环的形式通常更高效对于复用性强,在递归生成括号往往就没有上述高效问题给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合。例如,给出n=3,解集为:"((()))", "(()())", "(())()", "()()()", "()(())",递归关键 当前位置左括号不少于右括号golang 字符串不可变,故可用字节切片生成字符串append 生成的数据依赖于底层数组,有可变性,正常情况下用copy计数边界,分层递进与回溯,回溯期.

2020-09-27 16:37:26 152

原创 php非递归层序化数据库记录

需求从数据库读取到一系列分类记录,如下$arr = array(array('id' => 1, 'pid' => 0, 'name' => '分类1'),array('id' => 2, 'pid' => 0, 'name' => '分类2'),array('id' => 3, 'pid' => 0, 'name' => '分类3'),array('id' => 4, 'pid' => 2, 'name' => '分类2-

2020-09-27 13:03:03 103

原创 虚节点dummy

起源原因对链表而言因头结点的上一个节点不存在,很多对于其他节点,需要用上上一个节点的操作对头结点就不适合,通常就需要单独考虑头结点,若单独考虑头,一个不小心产生许多bug虚拟节点~dummy在链表的头部放入一个哨兵,然后连上head节点。之后就把head节点当做普通节点,就不用单独考虑各种奇葩问题了ListNode* dummy=new ListNode(-1); dummy->next=head;最后返回 return dummy->next;题面给定一

2020-09-26 19:51:56 1376

原创 golang 双重递归之路径总和

递归模型是计算机理论的强力支撑题面给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/path-sum-iiiroot = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 / \ 5 -3

2020-09-26 16:43:43 196

原创 golang 判断是否为二叉搜索树

引言使用数据范围可以,在合适的场景简化问题中序遍历的有序性方便判定二叉搜索树栈的多变性,在于并非是连续进或出, 而是进出不均等。如对弹出元素相关性分析,确定是否有新关联元素入栈,换而言之,当前出栈的元素连续的后一出栈元素,未必就是当下栈顶元素。如下所示,d 出 e入 再出是e而非最先留下的 c问题判断给出的二叉树是否是一个二叉搜索树(BST)二叉搜索树的定义如下一个节点的左子树上节点的值都小于自身的节点值一个节点的右子树上节点的值都大于自身的节点值所有节点的左右子树都必须是二叉搜

2020-09-24 17:49:38 361

原创 层序遍历的巧用

需求给定一个仅包含数字0-9 0−9 的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。例如根节点到叶子节点的一条路径是1→2→3,那么这条路径就用123 来代替。找出根节点到叶子节点的所有路径表示的数字之和这颗二叉树一共有两条路径,根节点到叶子节点的路径 12根节点到叶子节点的路径 13答案为 12+13=25常规思路先求得根节点到各自叶子节点路径将路径信息转为数字信息相加求和golang实现import "math"func sumNumbers( root

2020-09-24 12:00:58 193

原创 golang 非递归先序 与卡特兰数

非递归分析读取数据是出栈顺序出栈来自栈顶,与数据入栈顺序相反在出栈的同时,考察出栈元素可能产生新的入栈情况出栈的栈顶元素可能会产生新的入栈需求,一出多入,后入先出func preorderTraversal( root *TreeNode ) []int { if root == nil{ return nil } rs :=[]int{} stack :=[]*TreeNode{root} for len(stack)> 0 {

2020-09-21 23:18:31 257

原创 golang 中后序遍历构建二叉树

题面根据一棵树的中序遍历与后序遍历构造二叉树。假设树中没有重复的元素中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回二叉树 3 / \ 9 20 / \ 15 7分析中序遍历将二叉树分成左右两棵子树 (左 根 右)后序遍历最后访问根结点 (左 右 根)递归建树因此可以递归建树先记住中序遍历中每个数出现的位置,通常用hash。(题目条件:不存在重复数,如果存在重复数会更

2020-09-17 13:17:54 379

原创 栈的春天 反转每对括号的子串

栈的使用花样百出,多栈会简化很多问题题面给出一个字符串 s(仅含有小写英文字母和括号)。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。注意,您的结果中 不应 包含任何括号。输入:s = "a(bcdefghijkl(mno)p)q"输出:"apmnolkjihgfedcbq"来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-substrings-between-each-pair-of-.

2020-09-14 12:45:57 175

原创 括号的分数

递归虽简单明了,但能不用尽量不用题面给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:() 得 1 分。AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。(A) 得 2 * A 分,其中 A 是平衡括号字符串。示例输入: "(()(()))"输出: 6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/score-of-parentheses递归本质 寻找拆解当层子串,及条件递归,加,乘法描述平衡字符.

2020-09-13 09:28:46 767

原创 来自数学的降维打击

问题给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。四平方定理任何正整数都可以拆分成不超过4个数的平方和 —> 答案只可能是1,2,3,4若一个数最少可以拆成4个数的平方和,则这个数还满足 n = (4^a)*(8b+7) —> 因此可以先看这个数是否满足上述公式,如果不满足,答案就是1,2,3了若这个数本来就是某个数的平方,那么答案就是1,否则答案就只剩2,3了如果答案是2,即n=a2+b2,那

2020-09-11 12:46:22 968

原创 golang 组合数总和

题面给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例输入:candidates = [2,3,6,7], target = 7,所求解集为:[ [7], [2,2,3]]回溯思想回溯算法实际上一个类似枚举的深度优先搜索尝试过程,主要是在搜索尝试

2020-09-09 20:11:28 755

原创 算法 求下一个更大的元素

题面给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]分析使用单调栈,出栈针对栈顶单调递增或递减,单步多出直到出栈不不再符合条件p

2020-09-08 20:53:09 159

原创 golang 栈之删除重复项

删除重复项使用golang双向链表重当栈import "container/list"import "strings"func removeDuplicates(S string) string { stack :=list.New() var b strings.Builder for i:=0;i<len(S);i++ { if stack.Len() > 0 { if stack.Back().Value.(b

2020-09-07 19:50:10 261

原创 golang二叉树后序遍历

题面给定一个二叉树,返回它的 后序 遍历。示例输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]分析定义 在二叉树中,先左后右再根,即首先遍历左子树,然后遍历右子树,最后访问根结点已知前序遍历和中序遍历,就能确定后序遍历递归遍历后序遍历左子树后序遍历右子树访问根结点二叉树为空则结束返回type TreeNode struct { Val int Left *TreeNode

2020-09-07 14:49:20 571

原创 php栈之数组与SplStack

SPL(php标准库)提供了SplStack 双链表结构类作为栈的实现类,也可用数组简单替代栈特点先进后出不像列表,有去无回,栈可返回,即天生具备回退功能栈由于一直是在一端操作,因此适合判断成双成对的场景匹配,当全部取完意味为空全部匹配删除最外层括号有效括号字符串为空 ("")、"(" + A + “)” 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"","()","(())()" 和 “(()(()))” 都是有效的括号字符串。如果有效字符串.

2020-09-06 19:01:15 340

原创 golang最大子序和

题面给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。分析比较老实的方法,计算所有可能的子序和,取最大值 M*N问题本质在于若干个子序和可能需要被重置,即确定重写的时机若上次求和值小于当前新进值且上次求和小于0,则sum 需要被置为新进程,后开始持续累加实现import "math"func ma

2020-09-04 20:38:43 168

原创 golang 外观数列

题面给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。注意:整数序列中的每一项将表示为一个字符串。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:作者:力扣 (LeetCode)链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnpvdm/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业

2020-09-03 18:11:22 168

原创 golang 双指针滑动区间

思路双指针通常在滑动区间算法中使用,与KMP尽可能的复用已计算的信息思想一致。先确定可能的边界条件,预估充分出现在计算过程中动态调整指针区间,区间大小,移动求最大最小,至少要遍历一次给定的目标区,但可以M+N就不必M*N最大连续1的个数给定一个二进制数组, 计算其中最大连续1的个数。输入数组的长度是正整数,且不超过 10,000。输入: [1,1,0,1,1,1]输出: 3解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.算法func findMaxCons

2020-09-03 10:22:28 408

原创 golang 实现 strstr

题面实现 strStr() 函数。分析KMP 不用了,高效但反人类排除特殊情况子串为空,返回0,其它未找到返回 -1子串窗口区间同步比对,被查串标识实现func strStr(haystack string, needle string) int { if len(haystack) < len(needle){ return -1 } if len(needle)==0 { return 0 } rs :=-1

2020-09-02 15:15:30 271

空空如也

空空如也

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

TA关注的人

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