NeetCode刷题第21天(2025.2.4)
文章目录
- 114 Gas Station 加油站
- 115 Hand of Straights 顺子之手
- 116 Merge Triplets to Form Target 将 Triplelet 合并到 Form Target
- 117 Partition Labels 分区标签
- 118 Valid Parenthesis String 有效的括号字符串
- 119 Insert Interval 插入间隔
- 120 Merge Intervals 合并区间
- 121 Non-overlapping Intervals 非重叠区间
- 122 Meeting Rooms II 会议室 II
- 123 Rotate Image 旋转图片
114 Gas Station 加油站
沿着一条圆形路线有 n 个加油站。你会得到两个整数阵列的gas和cost,其中:
- gas[i] 是第 i 个站点的 gas 量。
- cost[i] 是从第 i 个加油站到第 (i + 1) 个加油站所需的汽油量。(最后一个站连接到第一个站)
您有一辆可以储存无限量汽油的汽车,但您在其中一个加油站以空油箱开始旅程。
返回起始加油站的索引,以便您可以按顺时针方向绕电路行驶一次。如果不可能,则返回 -1。
可以保证最多存在一个解决方案。
示例1:
Input: gas = [1,2,3,4], cost = [2,2,4,1]
Output: 3
说明:从第 3 站(索引 3)开始,加注 4 个单位的汽油。您的水箱 = 0 + 4 = 4
前往 0 号站。您的水箱 = 4 - 1 + 1 = 3
前往 1 号站。您的水箱 = 3 - 2 + 2 = 3
前往 2 号站。您的水箱 = 3 - 2 + 3 = 4
前往 3 号站。您的水箱 = 2 - 4 + 4 = 2示例2:
gas = [1,2,3], cost = [2,3,2]
Output: -1
说明:您不能从 0 或 1 号站开始,因为没有足够的汽油前往下一个站。
如果您从工号 2 开始,您可以移动到工号 0,然后移动到工号 1。
在站点 1,您的水箱 = 0 + 3 - 2 + 1 - 2 = 0。
您被困在第 1 站,因此无法绕着电路行驶。
解题1: 贪婪

这里用diff数组来存储油的加入和消耗之差,来判断是否可以从该位置出发。
class Solution:def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:# 首先要保证汽油之和要大于消耗if sum(gas) < sum(cost):return -1total = 0res = 0for i in range(len(gas)):total += (gas[i] - cost[i])if total < 0:total = 0res = i + 1return res
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)
115 Hand of Straights 顺子之手
您将得到一个整数数组hand和一个整数 groupSize,其中 hand [i] 是写在第i张卡片上的值。
您需要将卡片重新排列成组,以便每个组的卡片数量为 groupSize,并且卡片值连续增加 1。
如果可以通过这种方式重新排列卡片,则返回 true ,否则返回 false 。
示例1:
Input: hand = [1,2,4,2,3,5,3,4], groupSize = 4
Output: true
说明:卡片可以重新排列为 [1,2,3,4] 和 [2,3,4,5] 。示例2:
Input: hand = [1,2,3,3,4,5,6,7], groupSize = 4
Output: false
解释:我们能得到的最接近的是 [1,2,3,4] 和 [3,5,6,7] ,但第二组中的牌不是连续的。
解题1: 堆

我们首先用HashMap来存储每个数字的个数,每使用一个就把其对应的个数减一。同时用MinHeap来弹出最小值,同时当某个数在HashMap中的个数减少为0的时候,也将该数从最小堆中弹出。
class Solution:def isNStraightHand(self, hand: List[int], groupSize: int) -> bool:# 首先判断是否可以整除groupSizeif len(hand) % groupSize:return Falsecount = {}for n in hand:count[n] = 1 + count.get(n, 0)minH = list(count.keys())heapq.heapify(minH)while minH:first = minH[0]for i in range(first, first + groupSize):if i not in count:return Falsecount[i] -= 1if count[i] == 0:if i != minH[0]:return Falseheapq.heappop(minH)return True
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)
116 Merge Triplets to Form Target 将 Triplelet 合并到 Form Target
你得到一个整数 triplelets 的二维数组,其中三元组[i] = [ai, bi, ci] 表示第 i 个三元组。你还会得到一个整数数组 target = [x, y, z],这是我们想要得到的三元组。
要获取 target,您可以对 triplelets 零次或多次应用以下作用:
选择两个不同的三元组 triplets[i] 和 triplets[j],并将 triplets[j] 更新为 [max(ai, aj), max(bi, bj), max(ci, cj)] 。
例如,如果三元组[i] = [1, 3, 1] 且三元组[j] = [2, 1, 2],则三元组[j]将更新为 [max(1, 2), max(3, 1), max(1, 2)] = [2, 3, 2] 。
如果可以将 target 作为三元组的元素获取,则返回 true,否则返回 false。
示例1:
Input: triplets = [[1,2,3],[7,1,1]], target = [7,2,3]
Output: true
解释:选择第一个和第二个三元组,将第二个三元组更新为 [max(1, 7), max(2, 1), max(3, 1)] = [7, 2, 3]。示例2:
Input: triplets = [[2,5,6],[1,4,4],[5,7,5]], target = [5,4,6]
Output: false
解释:
解题1: 贪婪
class Solution:def mergeTriplets(self, triplets: List[List[int]], target: List[int]) -> bool:good = set()for t in triplets:if t[0] > target[0] or t[1] > target[1] or t[2] > target[2]:continuefor i, v in enumerate(t):if v == target[i]:good.add(i)return len(good) == 3
时间复杂度: O ( n 2 ) O(n²) O(n2)
空间复杂度: O ( 1 ) O(1) O(1)
117 Partition Labels 分区标签
你被给了一个由小写英文字母组成的字符串 s 。
我们希望尽可能地将字符串分割成多个子字符串,同时确保每个字母最多只出现在一个子字符串中。
返回一个表示这些子字符串大小的整数列表,按其在字符串中出现的顺序排列。
示例1:
Input: s = "xyxxyzbzbbisl"
Output: [5, 5, 1, 1, 1]
解释:字符串可以被分割为 ["xyxxy", "zbzbb", "i", "s", "l"] 。示例2:
Input: s = "abcabc"
Output: [6]
解题1: 双指针(贪心)

这里设置一个HashMap来映射每个字母最后出现的位置索引。
size用来记录substring的长度,同时用来检查改位置的字母最后一次出现的索引是不是小于end,如果不是需要修改end的值。
class Solution:def partitionLabels(self, s: str) -> List[int]:lastIndex = {} # char -> last index in sfor i, c in enumerate(s):lastIndex[c] = ires = []size, end = 0, 0for i, c in enumerate(s):size += 1end = max(end, lastIndex[c])if i == end:res.append(size)size = 0return res
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( m ) O(m) O(m)
n 是字符串 s 的长度,而 m 是字符串 s 中唯一字符的数量。
118 Valid Parenthesis String 有效的括号字符串
您被给定一个字符串 s ,它只包含三种类型的字符: ‘(’ 、 ‘)’ 和 ‘*’ 。
返回 true 如果 s 有效,否则返回 false 。
一个字符串如果遵循以下所有规则,则是有效的:
- 每个左括号 ‘(’ 都必须有一个相应的右括号 ‘)’ 。
- 每个右括号 ‘)’ 都必须有一个对应的左括号 ‘(’ 。
- 左括号 ‘(’ 必须在相应的右括号 ‘)’ 之前。
- 一个 ‘*’ 可以被当作一个右括号 ‘)’ 字符或一个左括号 ‘(’ 字符,或者作为一个空字符串 “” 。
示例1:
Input: s = "((**)"
Output: true
解释:其中一个 '*' 可能是一个 ')' ,另一个可能是空字符串。示例2:
Input: s = "(((*)"
Output: false
说明:字符串无效,因为开头多了一个 '(' ,不管多出来的 '*' 。
解题1: 贪心算法
class Solution:def checkValidString(self, s: str) -> bool:leftMin, leftMax = 0, 0for c in s:if c == "(":leftMin, leftMax = leftMin + 1, leftMax + 1elif c == ")":leftMin, leftMax = leftMin - 1, leftMax - 1else:leftMin, leftMax = leftMin - 1, leftMax + 1if leftMax < 0:return Falseif leftMin < 0: # s = ( * ) (leftMin = 0return leftMin == 0
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)
119 Insert Interval 插入间隔
您被给定一个非重叠区间数组 intervals ,其中 intervals[i] = [start_i, end_i] 表示 ith 区间的开始和结束时间。 intervals 最初按 start_i 升序排序。
您被赋予另一个区间 newInterval = [start, end] 。
将 newInterval 插入到 intervals 中,使得 intervals 仍然按 start_i 升序排列,并且 intervals 仍然没有重叠的区间。如果需要,可以合并重叠的区间。
返回 intervals 后添加 newInterval 。
注意:如果区间没有公共点,则它们是非重叠的。例如,[1,2] 和 [3,4] 是非重叠的,但 [1,2] 和 [2,3] 是重叠的。
示例1:
Input: intervals = [[1,3],[4,6]], newInterval = [2,5]
Output: [[1,6]]示例2:
Input: intervals = [[1,2],[3,5],[9,10]], newInterval = [6,7]
Output: [[1,2],[3,5],[6,7],[9,10]]
解题1: 贪心算法
class Solution:def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:res = []for i in range(len(intervals)):if newInterval[1] < intervals[i][0]:res.append(newInterval)return res + intervals[i:]elif newInterval[0] > intervals[i][1]:res.append(intervals[i])else:newInterval = [min(newInterval[0], intervals[i][0]), max(newInterval[1], intervals[i][1])]res.append(newInterval)return res
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)
120 Merge Intervals 合并区间
给定一个数组 intervals ,其中 intervals[i] = [start_i, end_i] ,合并所有重叠的区间,并返回覆盖输入中所有区间的非重叠区间数组。
您可以将答案以任何顺序返回。
注意:如果区间没有公共点,则它们是非重叠的。例如, [1, 2] 和 [3, 4] 是非重叠的,但 [1, 2] 和 [2, 3] 是重叠的。
示例1:
Input: intervals = [[1,3],[1,5],[6,7]]
Output: [[1,5],[6,7]]示例2:
Input: intervals = [[1,2],[2,3]]
Output: [[1,3]]
解题1: 排序
class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:# O(nlogn) 首先需要从小到大进行排序intervals.sort(key = lambda i : i[0])output = [intervals[0]]for start, end in intervals[1:]:lastEnd = output[-1][1]# 判断是否有重叠if start <= lastEnd:output[-1][1] = max(lastEnd, end)else:output.append([start, end])return output
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
空间复杂度: O ( n ) O(n) O(n)
121 Non-overlapping Intervals 非重叠区间
给定一个区间数组 intervals ,其中 intervals[i] = [start_i, end_i] ,返回你需要移除的最小区间数,以使得剩余的区间不重叠。
注意:即使有共同点,区间也不会重叠。例如, [1, 3] 和 [2, 4] 是重叠的,但 [1, 2] 和 [2, 3] 是非重叠的。
示例1:
Input: intervals = [[1,2],[2,4],[1,4]]
Output: 1
解释:移除[1,4]之后,其余的区间都是非重叠的。示例2:
Input: intervals = [[1,2],[2,4]]
Output: 0
解题1: 贪心(按起始时间排序)
class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:intervals.sort()res = 0prevEnd = intervals[0][1]for start, end in intervals[1:]:# 如果没有重叠if start >= prevEnd:prevEnd = endelse:res += 1prevEnd = min(end, prevEnd)return res
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
空间复杂度: O ( 1 ) 或 O ( n ) O(1) 或 O(n) O(1)或O(n),取决于排序算法。
122 Meeting Rooms II 会议室 II
给定一个包含会议时间间隔对象的数组,这些对象包括开始和结束时间,求在不发生任何冲突的情况下安排所有会议所需的最少天数。
示例1:
Input: intervals = [(0,40),(5,10),(15,20)]
Output: 2
解释:
day1: (0,40)
day2: (5,10),(15,20)示例2:
Input: intervals = [(4,9)]
Output: 1
解题1: 双指针

当我们进行遍历时,首先0开始,然后时5。当遍历到5的时候,发现0-30这个会议还没有结束。所以count+1。

当我们继续,到10的时候,一个会议结束,count-1。再继续,到15的时候,因为0-30这个还没有结束,所以count+1。

用双指针,每次比较start和end中的值,取小的那个,如果小的在start,那么count+1,否则count-1。
当都遇到10的时候,因为要一个会议结束,另一个才能开始。所以这里,end中的指针要+1,count要-1。
"""
Definition of Interval:
class Interval(object):def __init__(self, start, end):self.start = startself.end = end
"""class Solution:def minMeetingRooms(self, intervals: List[Interval]) -> int:start = sorted([i.start for i in intervals])end = sorted([i.end for i in intervals])res, count = 0, 0s, e = 0, 0# 只要遍历完satrt就可以停止while s < len(intervals):if start[s] < end[e]:s += 1count += 1else:e += 1count -= 1res = max(res, count)return res
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
空间复杂度: O ( n ) O(n) O(n)
123 Rotate Image 旋转图片
给定一个整数矩阵 n x n ,将其顺时针旋转 90 度。
您必须在原地旋转矩阵。不要分配另一个二维矩阵进行旋转。

示例1:
Input: matrix = [[1,2],[3,4]
]Output: [[3,1],[4,2]
]

示例2:
Input: matrix = [[1,2,3],[4,5,6],[7,8,9]
]
Output: [[7,4,1],[8,5,2],[9,6,3]
]
解题1: 旋转四格

从上图可以看出,一个n×n的矩阵,最外层旋转的次数不是n,而是n-1。

已经知道移动的步骤了,为了减少操作次数,我们可以先用一个临时变量来存储左上角的数,然后顺时针移动数字。
class Solution:def rotate(self, matrix: List[List[int]]) -> None:l, r = 0, len(matrix) - 1while l < r:for i in range(r - l):top, bottom = l, r# 保存左上角topLeft = matrix[top][l + i]# 左下移动到左上matrix[top][l + i] = matrix[bottom - i][l]# 右下到左下matrix[bottom - i][l] = matrix[bottom][r - i]# 右上到右下matrix[bottom][r - i] = matrix[top + i][r]# 左上到右上matrix[top + i][r] = topLeftr -= 1l += 1
时间复杂度: O ( n 2 ) O(n²) O(n2)
空间复杂度: O ( 1 ) O(1) O(1)
相关文章:
NeetCode刷题第21天(2025.2.4)
文章目录 114 Gas Station 加油站115 Hand of Straights 顺子之手116 Merge Triplets to Form Target 将 Triplelet 合并到 Form Target117 Partition Labels 分区标签118 Valid Parenthesis String 有效的括号字符串119 Insert Interval 插入间隔120 Merge Intervals 合并区间…...
人工智能|本地部署|ollama+chatbox快速Windows10下部署(初级篇)
一、 前言: 其实早一个月我已经使用过deepseek,并且也在自己的机器上通过ollama部署过,但一直没有太多动力,现在感觉还是的记录一下,省的自己给忘掉了 本文只是简单记录一下ollamaopen-webuichatbox部署通过网盘分享…...
chrome插件模板;使用 React 18 和 Webpack 5 的 Chrome 扩展样板
一、软件介绍(文末提供下载) 这是一个基本的 Chrome 扩展样板,可帮助您编写模块化和现代的 Javascript 代码,轻松加载 CSS,并在代码更改时自动重新加载浏览器。 github地址:https://github.com/lxieyang/c…...
大语言模型极速部署:Ollama 与 One-API 完美搭建教程
大语言模型极速部署:Ollama 与 One-API 完美搭建教程 本文将介绍如何通过命令行工具部署 Ollama 和 One-API,帮助你快速搭建私有化大模型。 一、安装 Ollama Ollama 是一个容器化的应用,方便部署和管理 AI 模型。以下是安装 Ollama 的步骤。…...
【C++】STL——list底层实现
目录 💕1.list的三个类介绍 💕2.list——节点类 (ListNode) 💕3.list——链表类 (List) 💕4.list——迭代器类(重点思考)(ListIterator) 💕5…...
Java 进阶day14XML Dom4j 工厂模式 Base64
目录 知识点1、XML 概念XML约束 知识点2、XML解析 Dom4j(Dom for java)XPath 知识点3、工厂模式知识点4、Base64 知识点1、XML 概念 XML的全称为(eXtensible Markup Language),是一种可扩展的标记语言。 XML的作用&…...
100.6 AI量化面试题:如何评估AI量化模型的过拟合风险?
目录 0. 承前1. 解题思路1.1 性能验证维度1.2 统计检验维度1.3 实践验证维度 2. 样本内外性能对比2.1 基础性能指标计算2.2 策略收益对比 3. 参数敏感性分析3.1 参数网格搜索3.2 稳定性评估 4. 白噪声测试4.1 随机数据测试 5. Deflated Sharpe Ratio5.1 DSR计算 6. 交易成本敏感…...
C++模板:泛型编程的魔法钥匙
前言 本篇博客将详细介绍C的模板 💖 个人主页:熬夜写代码的小蔡 🖥 文章专栏:C 若有问题 评论区见 🎉欢迎大家点赞👍收藏⭐文章 一:引言:为什么需要模板? 1.复杂代码…...
unordered_map/set的哈希封装
【C笔记】unordered_map/set的哈希封装 🔥个人主页:大白的编程日记 🔥专栏:C笔记 文章目录 【C笔记】unordered_map/set的哈希封装前言一. 源码及框架分析二.迭代器三.operator[]四.使用哈希表封装unordered_map/set后言 前言 哈…...
机器学习专业毕设选题推荐合集 人工智能
目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光,一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整理…...
软件工程导论三级项目报告--《软件工程》课程网站
《软件工程》课程网站 摘要 本文详细介绍了《软件工程》课程网站的设计与实现方案,包括可行性分析、需求分析、总体设计、详细设计、测试用例。首先,通过可行性分析从各方面确认了该工程的可实现性,接着需求分析明确了系统的目标用户群和功能…...
物联网领域的MQTT协议,优势和应用场景
MQTT(Message Queuing Telemetry Transport)作为轻量级发布/订阅协议,凭借其低带宽消耗、低功耗与高扩展性,已成为物联网通信的事实标准。其核心优势包括:基于TCP/IP的异步通信机制、支持QoS(服务质量&…...
缓存类为啥使用 unordered_map 而不是 map
性能考虑: std::unordered_map 是基于哈希表实现的,而 std::map 是基于红黑树实现的。对于查找操作,std::unordered_map 的平均查找时间复杂度是 O ( 1 ) O(1) O(1),而 std::map 的查找时间复杂度是 O ( l o g n ) O(log n) O(l…...
产品经理的人工智能课 02 - 自然语言处理
产品经理的人工智能课 02 - 自然语言处理 1 自然语言处理是什么2 一个 NLP 算法的例子——n-gram 模型3 预处理与重要概念3.1 分词 Token3.2 词向量化表示与 Word2Vec 4 与大语言模型的交互过程参考链接 大语言模型(Large Language Models, LLMs)是自然语…...
2024年MySQL 下载、安装及启动停止教程(非常详细),涉及命令行net start mysql80提示发生系统错误5的解决方案
一、安装包下载 官方网址: https://www.mysql.com/ MySQL 官方提供了两种不同的版本: 1.社区版本( MySQL Community Server ) :免费, 但MySQL 不提供任何技术支持 2.商业版本( MySQL Enterp…...
19.[前端开发]Day19-王者荣项目耀实战(二)
01_(掌握)王者荣耀-main-banner展示实现 完整代码 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewpor…...
lmk内存压力测试工具mem-pressure源码剖析
背景: android系统开发过程中,经常会遇到一些low memory kill的问题,在分析这些系统低内存导致被杀问题时候,经常因为不好复现而成为一个比较烦恼的阻碍。因为这种低内存问题本身就不属于一种功能操作类型的问题,属于…...
企业四要素如何用Java进行调用
一、什么是企业四要素? 企业四要素是在企业三要素(企业名称、统一社会信用代码、法定代表人姓名)的基础上,增加了一个关键要素,通常是企业注册号或企业银行账户信息。这种接口主要用于更全面的企业信息验证,…...
修剪二叉搜索树(力扣669)
这道题还是比较复杂,在递归上与之前写过的二叉树的题目都有所不同。如果当前递归到的子树的父节点不在范围中,我们根据节点数值的大小选择进行左递归还是右递归。为什么找到了不满足要求的节点之后,还要进行递归呢?因为该不满足要…...
一款由 .NET 官方团队开源的电子商务系统 - eShop
项目介绍 eShop是一款由.NET官方开源的,基于.NET Aspire构建的用于参考学习的服务架构电子商务系统,旨在展示如何利用.NET框架及其相关技术栈构建一个现代化的电子商务网站。该项目采用服务架构,将应用程序分解为多个独立的服务,…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
