7 pardon110

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 2w+

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

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

栈的使用花样百出,多栈会简化很多问题题面给出一个字符串 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

括号的分数

递归虽简单明了,但能不用尽量不用题面给定一个平衡括号字符串 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

来自数学的降维打击

问题给定正整数 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

golang 组合数总和

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

2020-09-09 20:11:28

算法 求下一个更大的元素

题面给定两个 没有重复元素 的数组 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

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

golang二叉树后序遍历

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

2020-09-07 14:49:20

php栈之数组与SplStack

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

2020-09-06 19:01:15

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

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

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

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

golang单链表反向

题面反转一个单链表输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL递归func reverseList(head *ListNode) *ListNode { if head == nil { return nil } if head != nil && head.Next==nil { return head }

2020-08-30 19:04:14

golang 两两交换链表中的节点

题面给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs分析基例关系,约束退出条件,递归前依赖,与后依赖当层退出,不代表整个行为结束了,它会返回上一层(回退),执行上一层递归

2020-08-29 15:00:25

goalng 之 二叉树的中序遍历

题面给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal栈思想栈具有先进后出的特点,典型的记忆回退效果,下例栈在整个循环期从无到有,再至虚无是动态变化,大部分节点都访问了两次import "container/list"

2020-08-28 19:37:09

php 已知前中序重构二叉树

已知先序遍历与中序遍历,可以确定重建一颗二叉树,本例用php演示题面输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。(注存在空结点)上图演示了先序遍历 根->左子->右子, 中序遍历 左子->根–>右子分析分治的思想来解决根据先序遍历,可知道根节点就是给定数组的第一个元素pre[.

2020-07-30 19:17:25

php自定义排序函数

一般而言系统库函数效率高,有时站在巨人的肩膀上也不失为一种解决办法最小数字需求输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。分析全排列组合,选择最小的一个对两个数字依据字符串拼接形式,自定义排序规则实现function PrintMinNumber($numbers){ usort($numbers,function($a,$b){ .

2020-07-30 12:23:34

顺时针打印矩阵

游戏也能开拓思路题面输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.思路分析常规解法:每轮打印一圈外围内层分方向上,右,下,左外层控制循环次数,但易越界魔方逆时旋转,每次取第一行,即为旋转后的效果,被涂部分即为每次想要的结果每次取完第一行,该行丢弃,将剩下的.

2020-07-29 20:24:39

golang 二进制链表转整数

题面给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。请你返回该链表所表示数字的 十进制值 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/convert-binary-number-in-a-linked-list-to-integer输入:head = [1,0,1]输出:5解释:二进制数 (101) 转化为十进制数 (5)解法 type ListNode s

2020-07-23 11:25:37

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。