算法刷题笔记
1、两数之和
1.1 题目大意
描述:给定一个整数数组 nums 和一个整数目标值 target。
要求:在该数组中找出和为 target 的两个整数,并输出这两个整数的下标。
1.2 解题思路
最简单的思路是枚举数组中每一个数 nums[i],寻找数组中是否存在 target - nums[i]。
这样利用两重循环暴力搜素,时间复杂度为 O(n2)。
另一种思路是利用字典。字典中键值对信息为 target-nums[i] :i。i 为下标。
遍历数组,对于每一个数 nums[i],先查找字典中是否存在 target - nums[i],存在则输出 target - nums[i] 对应的下标和当前数组的下标 i。没有则在字典中存入 target-nums[i] 的下标 i。
1.3 代码
def twoSum(self, nums: List[int], target: int) -> List[int]:
numDict = dict()
for i in range(len(nums)):
if target-nums[i] in numDict:
return numDict[target-nums[i]], i
numDict[nums[i]] = i
return [0]
2、两数相加
2.1 题目大意
描述:给定两个非空的链表 l1 和 l2。分别用来表示两个非负整数,每位数字都是按照逆序的方式存储的,每个节点存储一位数字。
要求:计算两个非负整数的和,并逆序返回表示和的链表。
2.2 解题思路
模拟大数加法,按位相加,将结果添加到新链表上。需要注意进位和对 10 取余。
2.3 代码
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
head = curr = ListNode(0)
carry = 0
while l1 or l2 or carry:
if l1:
num1 = l1.val
l1 = l1.next
else:
num1 = 0
if l2:
num2 = l2.val
l2 = l2.next
else:
num2 = 0
sum = num1 + num2 + carry
carry = sum // 10
curr.next = ListNode(sum % 10)
curr = curr.next
return head.next
本文来自博客园,作者:mag6,转载请注明原文链接:https://www.cnblogs.com/daniel-mag/p/16058675.html

浙公网安备 33010602011771号