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   

Pages: 1 2 3 4 5 6