1. 1——两数之和
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出和为目标值 target
的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
标签:数组,哈希表
代码:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
haxi = {}
for i, num in enumerate(nums):
if target - num in haxi:
return [haxi[target - num], i]
else:
haxi[num] = i
2. 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: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
dummy = res = ListNode()
add = 0
while l1 and l2:
x = l1.val
y = l2.val
res.next = ListNode((x + y + add) % 10)
add = (x + y + add) // 10
res = res.next
l1 = l1.next
l2 = l2.next
while l1:
x = l1.val
res.next = ListNode((x + add) % 10)
add = (x + add) // 10
res = res.next
l1 = l1.next
while l2:
y = l2.val
res.next = ListNode((y + add) % 10)
add = (y + add) // 10
res = res.next
l2 = l2.next
if add:
res.next = ListNode(add)
return dummy.next
给定一个字符串 s
,请你找出其中不含有重复字符的最长子串的长度。
标签:字符串,滑动窗口
代码:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
left = 0
right = 0
haxi = {}
res = 0
while right < len(s):
if s[right] in haxi and haxi[s[right]] >= left:
# 当前索引到的字符在哈希表中,且在当前滑动窗口中
leng = right - left
res = leng if leng > res else res
left = haxi[s[right]] + 1 # 更新滑动窗口的左端
haxi[s[right]] = right
right = right + 1
else:
haxi[s[right]] = right
right = right + 1
leng = right - left
res = leng if leng > res else res
return res