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。
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)