python-练习

1. 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]: # 表示最后需要返回一个list[int]

        n = len(nums) # 长度
        for i in range(n): # 这样可以避免重复
            for j in range(i+1, n):
                if nums[i] + nums[j] == target:
                    return [i,j] # 返回数组下表
        return []
    
            # 1   2-----n   1--2,3,4,5,...,n
            # 2   3-----n   2--3,4,5,6,...,n
            # 3   4-----n   

2. 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。


# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        dummy = ListNode(-1)
        p = dummy

        carry = 0
        while l1 or l2:
            x = 0
            if l1:
                x = l1.val
                l1 = l1.next
            y = 0
            if l2:
                y = l2.val
                l2 = l2.next
            carry, cur = divmod(x + y + carry, 10)

            pp = ListNode(cur)
            p.next = pp
            p = pp

        if carry > 0:
            pp = ListNode(carry)
            p.next = pp

        return dummy.next

3.请你找出其中不含有重复字符的 最长子串 的长度

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

 https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/wu-zhong-fu-zi-fu-de-zui-chang-zi-chuan-by-leetc-2/

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
               # 哈希集合,记录每个字符是否出现过
        occ = set()
        n = len(s)
        # 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动
        rk, ans = -1, 0
        for i in range(n):
            if i != 0:
                # 左指针向右移动一格,移除一个字符
                occ.remove(s[i - 1])
            while rk + 1 < n and s[rk + 1] not in occ:
                # 不断地移动右指针
                occ.add(s[rk + 1])
                rk += 1
            # 第 i 到 rk 个字符是一个极长的无重复字符子串
            ans = max(ans, rk - i + 1)
        return ans

        occ = set()
        n = len(s)
        rk = -1
        for i in range(n):
            while rk + 1< n and s[rk+1] not in occ:# rk表示从s[0]开始,s[0]不在occ中
                occ.add(s[rk+1]) # 将s[0添加进去]



        occ = set()
        occ.add(s[0])
        s[1] not in occ
        occ.add(s[1])
        s[2] not in occ
        occ.add(s[2])
        s[3] not in occ
        occ.add(s[3])
        s[4] not in occ
        occ.add(s[4])
        s[5] in occ and leng(s) = 5
        # 跳出循环,说明长度为4
        ans = max(0, 4-0 + 1)

        # 再从2开始
        # 此刻occ需要移除第1个
        occ.remove(0) # 此时occ的1,2,3,4都是不重复的
        a[5] in occ 
        occ.add(s[5])
        a[6] in acc
        occ.add(s[6])
        a[7] not in occ amd len(s) = 7
        # 跳出循环
        ans = max(5, 6 - 1+ 1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值