欢迎光临散文网 会员登陆 & 注册

Leetcode5 手写快速排序、合并区间、重建数字、字符串排列

2022-01-16 19:29 作者:房顶上的铝皮水塔  | 我要投稿

放寒假了这几天,然后回家啥的,有一两天没有写Leetcode hh

手写快排

手写快速排序这道题是找出数组中的第K个最大的数字中的,但是因为这道题没有别的多余的技巧,所以主要复习一下手写快速排序。

手写快速排序主要分成两个部分。第一个部分是将当前由start和end确定的数组分成两个部分,通过pivot元素隔开,左边的部分的所有元素小于pivot,右边的部分的所有元素大于pivot。然后在分别处理左右两边:

同时,还有另外一种排序就是归并排序。对于归并排序,先调用递归的当时将数组分解成一个一个的元素(组成的小数组),然后根据大小进行合并。在合并的过程中需要使用额外数组:

合并区间

这道题思路比较简单纯粹。首先我们将数组看做一个二元组,根据每个二元组的第一项进行排序。然后遍历数组,对于当前的二元组i,他的前一项i-1的第二项小于i的第一项,说明二者存在交集,然后比较i和i-1的第二项,取最大的结果,合并两项为一项。存到最后的结果ans中。每次取出ans和后面的进行对比:

从英文中重建数字

我个人觉得这道题非常无聊。我第一次实现的时候使用的是hash的方式,记录数字0-9的英文的字母出现的次数,然后使用s尝试减去,这种方式超时了。所以,最后只能使用官方题解的方法,使用特殊元素的方式,比如只有0中包含了z字母,进行推测:

字符串的排列

对于这道题,因为需要比较s1的某种排列在s2中是否会出现,很显然的一条思路是因为在排列前后的字符串的元素组成不会改变,那么,可以通过滑动窗口的方式,比较当前的串s1和s2长度为s1.length()的子串的元素是否相同。 具体的操作是通过第一次遍历,我们可以得出s1的所有字符的hash,后续每次移动一个字符,进来的字符数量++,出去的字符数量--。


Leetcode5 手写快速排序、合并区间、重建数字、字符串排列的评论 (共 条)

分享到微博请遵守国家法律