leetcode题解


盛最多水的容器


题面
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点。
在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
2<= n <= 3 * 104

示例
输入:[1,8,6,2,5,4,8,3,7]
输出:49 
解释:宽(从8至7的宽度 等于7) * 高(高度则选择小的  7) = 49

题解
class Solution:
    def maxArea(self, height: List[int]) -> int:
    	# 如果列表长度为2  返回小的那一个
        if len(height)<3:
            return min(height)
        acreage = 0
        # 双指针  
        i,j = 0,len(height)-1
        while i<j:
        	# 第一次  高(height[i],height[j] = 1, 7) * 宽(8) = 8
            a = min(height[i],height[j]) * (j-i)
            acreage = max(a,acreage)
            # 判断 如果左指针下标值 小于右指针  左指针+1
            if height[i]<height[j]:
                i+=1
            else:
                j-=1
        
        return acreage



杨辉三角

题面
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行

示例
在杨辉三角中,每个数是它左上方和右上方的数的和

题解

def generate(numRows: int):
    result = []
    for i in range(numRows):
        now = [1]*(i+1)
        if i >= 2:
            for n in range(1,i):
                now[n] = pre[n-1]+pre[n]
        result += [now]
        pre = now
    return result



连续子数组的最大和


题面
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值

示例
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6 		# 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

题解
def maxSubArray(nums):
	for i in range(1, len(nums)):
	    nums[i]= nums[i] + max(nums[i-1], 0)
	return max(nums)

# 如果当前元素的前一个值比0小 则当前元素不变,否则 当前元素+前一个元素
[-2, 1, -3, 4, -1, 2, 1, -5, 4]
[-2, 1, -3, 4, -1, 2, 1, -5, 4]
[-2, 1, -2, 4, -1, 2, 1, -5, 4]
[-2, 1, -2, 4, -1, 2, 1, -5, 4]
[-2, 1, -2, 4, 3, 2, 1, -5, 4]
[-2, 1, -2, 4, 3, 5, 1, -5, 4]
[-2, 1, -2, 4, 3, 5, 6, -5, 4]
[-2, 1, -2, 4, 3, 5, 6, 1, 4]



字母异位词分组


题面
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串

示例
输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]


题解
def groupAnagrams(strs):
    dic = {
   }
    for s in strs:
        keys = "".join(sorted(s))
        if keys not in dic:
            dic[keys] = [s]
        else:
            dic[keys].append(s)
    return list(dic.values())

# 对s排序后
aet
abt
aet
ant
ant
aet

dic:{
   'ant': ['nat', 'tan'], 'abt': ['bat'], 'aet': ['ate', 'eat', 'tea']}



单词规律


题面
给一种有规律的字符串 pattern 和一个字符串 s ,判断 s 的规律是否和 pattern 相同。

示例
输入: pattern = "abba", s = "dog cat cat dog"
输出: true

题解
# 使用字典 耗时36ms
def wordPattern(pattern, s):
	# 首先判断长度是否一致
    if len(s.split(' ')) != len(pattern):
        return False
    # 使用 字典 以自身为key 对方为value 存储
    dp = dict()
    ds = dict()
    for pp, ss in zip(pattern, s.split(' ')):
    	# 如果 自身字符串 在字典中 且value不等于对方当前的字符串 返回False
        if (pp in dp and dp[pp] != ss) or (ss in ds and ds[ss] != pp):
            return False
        dp[pp] = ss
        ds[ss] <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值