0%

输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)

B是A的子结构, 即 A中有出现和B相同的结构和节点值。

例如:
给定的树 A:

1
2
3
4
5
    3
/ \
4 5
/ \
1 2

给定的树 B:

1
2
3
4
   4 
/
1
返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。
1
2
3
4
5
6
7
8
示例 1

输入:A = [1,2,3], B = [3,1]
输出:false
示例 2

输入:A = [3,4,5,1,2], B = [4,1]
输出:true

限制:

0 <= 节点个数 <= 10000

阅读全文 »

二叉树的遍历方式是一类最基本、也是最重要的题目,其中主要包括:前序遍历、后序遍历、中序遍历、层次遍历,这篇文章主要用来梳理二叉树遍历的两种实现方式:递归以及迭代

阅读全文 »

蓝桥杯总结

2020年10月26日记

今天成绩出来了,省赛三等奖。知道这个成绩的时候,没有意外,因为自己知道自己做的很不好,但是还是非常的失落,毕竟这几个月其实大部分时间都花在了算法上了。最后取得这样的成绩我觉得主要的原因有几个:

  • 每一个算法学习的都有些囫囵吞枣,每一个算法其实细节都不够扎实,实际上很多问题,我都是根据算法笔记去做的,然后每一节都是对应了一个知识板块,似乎这样就告诉我往这方面想,但是真正竞赛的时候,不会给你说用什么方法。
  • 不细心。这一次填空题因为不细心丢了20分,虽然这20分加上去,我可能最多得省二,但是这不属于我能力之外的错误,如果是自己的能力不足导致的错误,我不会觉得很遗憾,但是这15分明显不是我能力之外的错误,比如把年月日看错误,然后行列对标错误,这种问题真的不应该犯。
  • 敲代码的细节不够,我每一次做算法题的时候,都会遇到卡壳的地方,然后我现在刷题基本上很多都是先看的题解,然后看的同时直接看的代码,这会导致我产生一种卡壳依赖现象,如果我不会了,下意识我就会去看看别人是怎么敲出来的。
  • 刷题量还是远远不够的,目前来说我主要就刷了一些算法笔记上的题,其实这个题量远远不够。

以后的时间应该在这些方面进行改进:

  • 对于每一个算法不应该囫囵吞枣,每次学完一个算法我希望我能够总结以下东西。
    • 这个算法最典型的应用是什么?
    • 这个算法有没有一个固定的框架?
    • 这个算法的核心思想是什么?
    • 这个算法哪个点最难以理解?
    • 目前这个算法还有哪些例题,或者哪些自己做过的题不太理解的,把它写下来,过段时间再次来理解。
  • 改善自己学习算法的习惯。我觉得我们可以模仿别人的代码写一遍,但这始终不是自己的东西,如果当时不能重新写一遍,那么第二天也应该重新把这道题重新写一遍,因为你不知道你自己做的时候,会遇到哪些无法解决的问题。如果不能解决,就再循环往复这个过程。
  • 改善自己写代码的习惯。算法最主要的是一个思维流程,流程最重要,如果一个算法流程比较长,我的大脑很难记住每一个细节,或者说如何落实到每一个地方会非常困难,我应该养成一种自顶向下编码的习惯。拿到一个题,首先不是编码,而是画一个流程图或者用其他方式描述自己的算法过程,建立一个Framework,然后暂时没有实现的板块,可以使用注释标注,或者说使用一个空函数去表明我需要这么一个函数。
  • 在做不到刷大量题目的情况下,保证每一个题的刷题质量,因为至少我刷了这个题是有用的,也许没有质变,也许这就是颗种子,只需要等待一个含苞待放的契机,可能就会一点百通。

最后的总结:这几个月以来,自己学习算法,可以感觉到自己明显在编码能力上,有了提升,当然这种提升还不够,但是现在面对一个需要算法解决的问题以后,不再恐惧,感觉自己能够有一战之力,从对敲代码的恐惧到现在有一种想用代码去实现一个算法的转变,也是这几个月最大的收获吧。我也希望自己能够以后不管遇到什么挫折与困难,在短暂的失落以后不是一蹶不振,妄自菲薄,而是及时总结经验,改正错误。

==2021蓝桥杯你给我等着!!!!!!!==

1034 Head of a Gang (30分)

One way that the police finds the head of a gang is to check people’s phone calls. If there is a phone call between A and B, we say that A and B is related. The weight of a relation is defined to be the total time length of all the phone calls made between the two persons. A “Gang” is a cluster of more than 2 persons who are related to each other with total relation weight being greater than a given threshold K. In each gang, the one with maximum total weight is the head. Now given a list of phone calls, you are supposed to find the gangs and the heads.

阅读全文 »

你将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事。这些片段可能有所重叠,也可能长度不一。

视频片段 clips[i] 都用区间进行表示:开始于 clips[i][0] 并于 clips[i][1] 结束。我们甚至可以对这些片段自由地再剪辑,例如片段 [0, 7] 可以剪切成 [0, 1] + [1, 3] + [3, 7] 三部分。

我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接成覆盖整个运动过程的片段([0, T])。返回所需片段的最小数目,如果无法完成该任务,则返回 -1 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
示例 1:

输入:clips = [[0,2],[4,6],[8,10],[1,9],[1,5],[5,9]], T = 10
输出:3
解释:
我们选中 [0,2], [8,10], [1,9] 这三个片段。
然后,按下面的方案重制比赛片段:
将 [1,9] 再剪辑为 [1,2] + [2,8] + [8,9] 。
现在我们手上有 [0,2] + [2,8] + [8,10],而这些涵盖了整场比赛 [0, 10]。
示例 2:

输入:clips = [[0,1],[1,2]], T = 5
输出:-1
解释:
我们无法只用 [0,1] 和 [1,2] 覆盖 [0,5] 的整个过程。
示例 3:

输入:clips = [[0,1],[6,8],[0,2],[5,6],[0,4],[0,3],[6,7],[1,3],[4,7],[1,4],[2,5],[2,6],[3,4],[4,5],[5,7],[6,9]], T = 9
输出:3
解释:
我们选取片段 [0,4], [4,7] 和 [6,9] 。
示例 4:

输入:clips = [[0,4],[2,8]], T = 5
输出:2
解释:
注意,你可能录制超过比赛结束时间的视频。

提示:

1 <= clips.length <= 100
0 <= clips[i][0] <= clips[i][1] <= 100
0 <= T <= 100

阅读全文 »

给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。

进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?

阅读全文 »

字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。

阅读全文 »

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:

输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:

输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,”pwke” 是一个子序列,不是子串。

阅读全文 »

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

阅读全文 »

给定一个单链表 L:L0→L1→…→Ln-1→Ln ,
将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 1:

给定链表 1->2->3->4, 重新排列为 1->4->2->3.
示例 2:

给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.

阅读全文 »