NO.4 两个排序数组的中位数(困难)
题目描述:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。你可以假设 nums1 和nums2不同时为空。
关于这个题目其实我并没有达到他的算法复杂度要求,由于我不知道python里的sort函数内部是怎么去排序的,但时间复杂度肯定没有超过O(min(m,n)),而且运行之后速度也挺快的,战胜了81%的人,所以我也没在去纠结这个了,而且我这个就短短的几行代码,比他解答里提供的简单很多。
因为没有达到算法时间复杂度要求,其实这个题目已经可以变成简单了
class Solution:
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
num=nums1+nums2
num.sort()
length=len(nums1)+len(nums2)
if length%2==0:
return (num[length//2-1]+num[length//2])/2
else:
return num[(length+1)//2-1]
NO.5 最长回文子串(中等)
题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
这个题目里的回文子串就是顺着读和倒着读是同样的,在这里我用的解答就是这种方法,时间复杂度非常的高,还有一种方法则是时间复杂度稍微低一点,代码长一点,方法是从中心往两边拓展看其是否相等,需要注意的是要分清字符串是偶数个和奇数个的回文子串稍有不同。
class Solution:
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
length=0
longs=s
for i in range(len(s)):
for j in range(i,len(s)):
if s[j]==s[i]:
temp=s[i:j+1]
huiwen=temp[::-1]
cmp=j+1-i
if huiwen==temp and cmp>length:
length=cmp
longs=huiwen
return longs