Leetcode刷题记

  1. 两数之和
    给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和位目标值target的那两个整数,并返回它们的数组下标
    你可以假设每种输入只会对应一个答案 但是 数组中同一个元素在答案中不能重复出现
    你可以按照任意顺序返回答案
    题解思路
    利用枚举对数组进行遍历,第一层for循环直接遍历数组,第二层for循环的起始位置为第一层+1,起始索引也为第一层+1,通过两层value值相加判断是否等于target,若等于则返回索引得到答案
	class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for index0,value0 in enumerate(nums):
            for index1,value1 in enumerate(nums[index0+1:],index0+1):
                if value0+value1==target:
                    return index0,index1
  1. 两数相加
    给定两个非空的链表,表示两个非负的整数,它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字
    请你将两个数相加,并以相同形式返回一个表示和的链表
    你可以假设除了数字0以外,这两个数都不会以0开头
    题解思路
    作者之前没在Python中接触过链表,初始思路使用普通列表直接做的,但是过不了,参考了一下题目的评论区的代码
	class Solution:
	    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
	        re = ListNode(0)
	        r = re
	        carry = 0
	        while(l1 or l2): 
	            x = l1.val if l1 else 0 # 判断是否是空节点,不是的话取出这个节点的val,为空的话返回0(因为l2不为空需要继续运算)
	            y = l2.val if l2 else 0
	            s = carry + x + y
	            carry = s//10  # 对10取余 大于0 
	            r.next = ListNode(s%10)
	            r = r.next
	            if(l1!=None):l1 = l1.next
	            if(l2!=None):l2 = l2.next
	        if(carry>0):
	            r.next=ListNode(1)
	        return re.next
  1. 无重复字符的最长子串
    给定一个字符串s,请你找出不含有重复字符的最长子串的长度
    题解思路
    滑动窗口
    一个队列abcabcbb,进入这个队列(窗口)为abc满足题目要求,当再进入a,队列就变成abca,这时候不满足要求,我们就要开始移动队列
    如何移动?
    我们只需要把队列左边的元素移除就行了,知道满足题目要求
    一直维持这样的队列 找出队列出现的最长的长度 得到答案
    时间复杂度 O(n)
	class Solution:
	    def lengthOfLongestSubstring(self, s: str) -> int:
	        if not s: return 0
	        left = 0
	        lookup = set()
	        n=len(s)
	        max_len = 0
	        curr_len = 0
	        for i in range(n):
	            curr_len += 1
	            while s[i] in lookup:
	                lookup.remove(s[left])
	                left += 1
	                curr_len -= 1
	            if curr_len > max_len : max_len = curr_len
	            lookup.add(s[i])
	        return max_len
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值