LeetCode 3.4.5题

合并nums1和nums2,排序后根据length是单数还是双数找到中位数。
摘要由CSDN通过智能技术生成

3.无重复字符的最长子串

解题思路:

  • 使用map的滑动窗口解法,和第二题使用hashmap优化类似
  • 滑动窗口法的思想是,在ans上设置一个start和end指针,end指针随着字符存入而改变,start指针随着出现重复元素而改变
  • 判断新进入的字符串是否存在于之前的map中,若存在,则移动start指针到map中重复元素的位置
class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        n = len(s)
        ans = start  = 0
        map = {}
        for end,val in enumerate(s):                #end是提取字符串s中元素的位置
            if val in map.keys():
                start = max(map.get(val)+1,start)   #这里的+1是将指针后移,删除开头的重复元素
            map[val] = end                          #将字符和end存入map
            ans = max(ans,end-start+1)
        return ans

特殊情况:

  • 字符串为空
  • 字符串全部为相同字符

4.寻找两个正序数组的中位数

        这个题我想的是合并nums1和nums2,排序后根据length是单数还是双数找到中位数。

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """
        #num = nums1.append(nums2)
        numss = nums1 + nums2
        num = sorted(numss)
        n = len(num)
        
        if n%2==0:
            ans = 0.5*(num[(n/2)-1]+num[n/2])
        elif n%2 ==1:
            ans = num[(n-1)/2]
        
        return ans    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

icecreamdinner

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值