LeetCode算法题解答

LeetCode算法题解答

经过某公司的线上机试,痛定思痛,开个坑刷LeetCode,大部分是自己想的,卡几个小时的就会看别人解答了,呜呜呜,有些时候感觉,一个看起来挺直白的东西,写程序实现怎么这么麻烦=-=,还是自己太菜了的缘故。先刷腾讯精选50题,不定期更新。

第四题:寻找两个有序数组的中位数
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
代码:

def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:        
    from math import floor
    nums1.extend(nums2)
    nums1.sort()
    k = len(nums1)
    mid = 0
    if (k % 2) == 0 :
        mid = (nums1[floor(k/2-1)] + nums1[floor(k/2)])/2
    else:
        mid =nums1[floor(k/2)]
    return float(mid)

第七题:整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
代码:

def reverse(self, x: int) -> int:
    y = list(map(int, str(abs(x))))      
    y.reverse()
    while True:
        if y == []:
            return 0
        if y[0] == 0 :
            y.pop(0)
        else:
            break
    k = str(y[0])
    for i in range(1, len(y)):
        k = k + str(y[i])
    if int(k) > 2147483647:
        return 0
    else:
        if x >= 0:
            return int(k) 
        else:
            return -int(k)

第八题:字符串转换正数
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0。
说明:
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,qing返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
代码:写了半天,弄出来的太蠢了,自己看不下去了,看了下别人的解答,十行代码等于自己的100行…学习了一个正则,再开个坑学习什么正则=-=。。。

 def myAtoi(self, str: str) -> int:
    import re
    renum = re.findall("(^[\d\-\+]?\d+)", str.strip())
    if renum == []:
        return 0
    else:
        if "-" in renum[0]:
            return max(int(renum[0]), - (2 ** 31))
        else:
            return min(int(renum[0]), 2 ** 31 - 1)

第九题:回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
代码:

 def isPalindrome(self, x: int) -> bool:
    if x < 0:
        return False
    y = list(map(int, str(x)))
    z = y.copy()
    y.reverse()
    if y == z:
        return True
    else:
        return False

第十一题:盛水最多的容器
给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器,且 n 的值至少为 2。
代码:

def maxArea(self, height: List[int]) -> int:
    l = 0
    r = len(height) - 1
    max_v = 0
    while l < r:
        if height[l] < height[r]:
            temper_v = (r- l)*height[l]
            l = l + 1
        else:
            temper_v = (r- l)*height[r]
            r = r - 1
        if max_v < temper_v:
            max_v = temper_v
    return max_v     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值