作者归档:Young

LeetCode-4

概述

作为复杂题的第一题(Median of Two Sorted Arrays),在时间复杂度为O(log (m+n))mn均为数组长度)的要求之下,求两个已排序数组的中位数。

分析

首先中位数的定义可以在 WikiPedia 上了解到。在已排序的前提下,即奇数元素个数的数组,为中间值;偶数元素个数的数组则为中间二值的算数平均数。

那么两个序列求中位数,可以考虑先将二者合并排序之后,进行中位数的求值。

考虑到两数组已经排序,那么我们所需要做的就是进行一次归并排序。

归并排序作为一个相当稳定的排序方式,在时间复杂度上能够满足需求。

考虑到虽然数组是排序数组,但是并没有说明是升序或是降序,无妨,如果是降序,那么将下标从尾部开始即可,但是个人测试,应该没有出现这类 case 。

解法

 

leetcode-58-263-326-345

本次将Length of Last WordUgly NumberPower of ThreeReverse Vowels of a String 一起写解题思路。

这四道题都相当简单,整个解题思路都会很简略。

58 Length of Last Word

概述

Length of Last Word 题意是求字符串中最后一组连续非空字符的字符串长度。

分析

从字符串末尾开始向前查找,如果一直是空白字符,那么长度不应被计入。

当开始遇到非空字符,开始计算长度,直到遇到下一个空白字符,返回结果。

解法

263 Ugly Number

概述

Ugly Number 即判断一个数字其因数只能由2、3、5构成。1也被认为是ugly number。

分析

直接通过循环,尝试对输入数字,分别尝试是否能够整除2、3、5,如果能除到1,说明必然是这三个数字中的1到3个相乘得到的,反之则不是。

解法

326 Power of Three

概述

Power of Three 即判断输入数字是否是是3的n次幂。

分析

如果用循环除法,那么只需要判断能不能除到1即可。

在不使用循环的情况下,考虑到输入的数字范围仅仅是int,那么结果个数是有限的,可以通过提前算出结果,判断输入是否等于这些结果之一判断。

解法

345 Reverse Vowels of a String

概述

Reverse Vowels of a String 需要我们完成的是交换字符串中所有元音字母的位置。

分析

如果一个字符串仅仅包含元音字母,那么对调位置其实与反转字符串操作等同。

可以考虑抽取所有的元音字母组成一个字符串,反转之后重新遍历字符串,遇到元音字母替换即可。

解法

LeetCode-3

概述

今天份的LeetCode题目 Longest Substring Without Repeating Characters 也是一道 Medium 的题目。

大意即找出给定字符串中的连续最长非重复子序列的长度。

分析

首先,字符串连续的前提之下,若在位置 nm (m>n)出现了重复的字符,n位置以及之前的字符是不能再继续算入连续的非重复字符串的,所以,这时候统计的字符串的起始位置要变为 n + 1 位置下的字符。

在出现重复时,判断当前已经连续的非重复字符的个数是否已经大于已记录的最长字符串的长度,如大于则替换之。

最后返回计算出的结果即可。

这一方法只需一次遍历字符串即可得知最大的长度,由于使用了HashMap存储最长子串中的字符与下标的对应关系,时间复杂度为O(n)

解法

LeetCode-2

概述

Add Two Numbers 难度为Medium,这一题目简单来说即给出两个序列,代表两个整数,模拟加法运算。

分析

这一题难度个人认为依然不大,即把正常加法的算式过程用程序表示。需要特殊处理的是进位这一操作。

正常的加法竖式运算,需要将最低位对其,然后开始从低位向高位计算。

再具体一些,考虑一个加法运算,两个数相加,一个数字长度为n,一个数字为m,m>n,那么,和的字符个数至多为m+1。

对于进位值的计算,其实就是将当前位数的值以及前期的进位值相加,除以10即为进位制。

这一解法可以在O(n)的时间复杂度上解决问题。

解法

LeetCode-1

概述

作为简单题的第一题(Two Sum),简答来说就是给出一个序列以及目标值,求出能加和出目标值的两个数字在数组中的下标。

分析

这个题目可以说是一目了然,直接能够想到的解法就是遍历这一个序列,然后遍历下标大于当前遍历到的数字的元素,如果有匹配的数字就直接返回结果即可。

如果单纯遍历,时间复杂度高达O(n2),这个复杂度不太令人满意。

那么是否可以通过空间换时间呢?自然是没问题的。

后续考虑通过使用HashMap的方式记录每个值对应的元素的下标,每次检查是否有当前值相加得到目标值的的key存在,将时间复杂度降低到了O(n),不过空间复杂度也上升到了O(n)

解法