每日算法之在二叉树中找到两个节点的最近公共祖先

JZ86 在二叉树中找到两个节点的最近公共祖先 题目 给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。 注:本题保证二叉树中每个节点的val值均不相同。 方法 BFS,非递归方法 思路 算法实现 看到6和7公共祖先有5和3, ...

每日算法之连续子数组的最大和(二)

JZ85 连续子数组的最大和(二) 题目 输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,找到一个具有最大和的连续子数组。 1.子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组 2.如果存在多个最大和的连 ...

每日算法之二叉树中和为某一值的路径(三)

JZ84 二叉树中和为某一值的路径(三) 题目 给定一个二叉树root和一个整数值 sum ,求该树有多少路径的的节点值之和等于 sum 。 1.该题路径定义不需要从根节点开始,也不需要在叶子节点结束,但是一定是从父亲节点往下到孩子节点 2.总节点数目为n 3.保证最后返回的路径个数在整形范围内(即 ...

每日算法之把二叉树打印成多行

JZ78 把二叉树打印成多行 题目 给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从左至右输出,每一层输出一行, 将输出的结果存放到一个二维数组中返回。 例如:给定的二叉树是{1,2,3,#,#,4,5} [ [1], [2,3], [4,5] ] 方法 非递归层 ...

每日算法之删除链表中重复的结点

JZ76 删除链表中重复的结点 题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5 方法1 哈希表进行删除 思路 算法实现 LinkedHashMap实现顺序插入,不过查 ...

每日算法之字符流中第一个不重复的字符

JZ75 字符流中第一个不重复的字符 题目 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符 "go" 时,第一个只出现一次的字符是 "g"。 当从该字符流中读出前六个字符 “google" 时,第一个只出现一次的字符是"l"。 方法1 使用LinkedHas ...

每日算法之和为S的连续正数序列

JZ74 和为S的连续正数序列 题目 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。 但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。 没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。 ...

每日算法之求1+2+3+...+n

JZ64 求1+2+3+...+n 题目 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 方法 位运算 思路 算法实现 从1连加到n,不能使用城乘除法,那就只能相加了。一个一个加,但是循环需要判断什么时候 ...

每日算法之左旋转字符串

JZ58 左旋转字符串 题目 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。 对于一个给定的字符序列 S ,请你把其循环左移 K 位后的序列输出。 例如,字符序列 S = ”abcXYZdef” , 要求输出循环左移 3 位后的结果,即 “X ...

周而复始,往复循环,递归、尾递归算法与无限极层级结构的探究和使用(Golang1.18)

所有人都听过这样一个歌谣:从前有座山,山里有座庙,庙里有个和尚在讲故事:从前有座山。。。。,虽然这个歌谣并没有一个递归边界条件跳出循环,但无疑地,这是递归算法最朴素的落地实现,本次我们使用Golang1.18回溯递归与迭代算法的落地场景应用。 递归思想与实现 递归思想并非是鲜为人知的高级概念,只不过 ...

每日算法之和为S的两个数字

JZ57 和为S的两个数字 题目 输入一个升序数组 array 和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,返回任意一组即可,如果无法找出这样的数字,返回一个空数组即可。 方法1 暴力解题 思路 算法实现 两次循环,两个值相加与sum进行比较,为true直接br ...