python 02 List
Python 1-14 列表
第一课
1437. 是否所有 1 都至少相隔 k 个元素
class Solution:def kLengthApart(self, nums: List[int], k: int) -> bool:cnt = k # 处理第一个 1for i, x in enumerate(nums):if x == 1:if cnt < k: return Falsecnt = 0 # 遇到 1 从新记数else: cnt += 1return True# left = -(k + 1) # 处理第一个 1# for i, x in enumerate(nums):# if x == 1:# if i - left <= k: return False# left = i # 记录 1 的位置# return True
★997. 找到小镇的法官
有向图中节点的入度和出度的概念。在有向图中,一个节点的入度是指向该节点的边的数量;而一个节点的出度是从该节点出发的边的数量。
class Solution:def findJudge(self, n: int, trust: List[List[int]]) -> int: if n == 1: return 1d = [0] * (n + 1) # 列表的元素全是 0,共 n + 1 元素。for a, b in trust:d[b] += 1 # 如果被信任加一d[a] -= 1 # 信任别人减一for i, x in enumerate(d):if x == n - 1: return i# if n - 1 in arr: return arr.index(n - 1)return -1
26. 删除有序数组中的重复项
class Solution:def removeDuplicates(self, nums: List[int]) -> int:left = 1n = len(nums)for i in range(1, n):if nums[i] != nums[i - 1]:nums[left] = nums[i]left += 1return left
第二课
★1436. 旅行终点站
知识点: 列表 list,append。
class Solution:def destCity(self, paths: List[List[str]]) -> str:start, end = [], []for s, e in paths:start.append(s)end.append(e)for x in end:if x not in start:return x
1299. 将每个元素替换为右侧最大元素
知识点: 逆序遍历
class Solution:def replaceElements(self, arr: List[int]) -> List[int]:n, m = len(arr), -1 # m 记录最大值for i in range(n - 1, -1, -1): # 逆序遍历m, arr[i] = max(arr[i], m), m # 原地修改,可定义列表。return arr
1394. 找出数组中的幸运数
class Solution:def findLucky(self, arr: List[int]) -> int:q = [0] * 501 # 统计个数# q[0] = -1 # 去掉 0for x in arr: # 统计每个数的个数q[x] += 1# res = -1 # 先假设没有# for i, x in enumerate(q[1:], 1): # if i == x: res = i# return res for x in range(len(q) - 1, 0, -1): # 逆序遍历if x == q[x]: return xreturn -1
python 内置函数 enumerate()
将一个 可遍历 iterable 数据对象(如 list、tuple 或 str)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
函数返回一个 enumerate 对象,是一个 可迭代对象。具体元素值可通过遍历取出。
语法:
enumerate(sequence, [start=0])
参数:
sequence – 一个序列、迭代器或其他支持迭代对象。是一个可迭代对象。
start – 下标起始位置。是一个可选参数,表示索引从几开始计数。
返回 enumerate(枚举) 对象。
a = [1,2,3,4]
# 从第二个元素开始,下标从 1 开始
for i, x in enumerate(a[1:], 1):print(i, x)
# 1 2
# 2 3
# 3 4
**知识点:**推导式,生成器,next。
教程:Python 推导式
class Solution:def destCity(self, paths: List[List[str]]) -> str:citiesA = {path[0] for path in paths}return next(path[1] for path in paths if path[1] not in citiesA)
第三课
1700. 无法吃午餐的学生数量
class Solution:def countStudents(self, students: List[int], sandwiches: List[int]) -> int:# n = 0# while n < len(students):# if students[0] == sandwiches[0]:# students.pop(0)# sandwiches.pop(0)# n = 0# else:# students = students[1:] + [students[0]]# n += 1# return ncnt = [0, 0] # 统计喜欢圆形和方形三明治学生数量for i in students: cnt[i] += 1for i in sandwiches: # 依次取出栈顶三明治,直到没有学生喜欢 i。if cnt[i] == 0: breakcnt[i] -= 1return sum(cnt)
▲1089. 复写零
class Solution:def duplicateZeros(self, arr: List[int]) -> None:"""Do not return anything, modify arr in-place instead."""## 方法一:insert pop# i = 0# while i < len(arr):# if not arr[i]:# arr.pop()# arr.insert(i, 0)# i += 1# i += 1## 方法二:添加标记 n = len(arr)i = j = 0while j < n:if arr[i] == 0: j += 1i += 1j += 1i -= 1 # i 回到最后一次合法的位置j -= 1 # j 同理,但 j 仍可能等于 n(例如输入 [0])while i >= 0:if j < n: arr[j] = arr[i]if arr[i] == 0:j -= 1arr[j] = arr[i]i -= 1j -= 1
904. 水果成篮
算法:双指针
class Solution:def totalFruit(self, fruits: List[int]) -> int:arr = [0] * len(fruits) # 0 <= 种类 < len(fruits) <= 100000left = 0 # 左边界k = 0 # 记录区间包含的种类for i, x in enumerate(fruits):if arr[x] == 0: k += 1 # 遇到一种arr[x] += 1 # 计数if k > 2: # 种类 > 2 左边同步收缩 否则右边单边扩张y = fruits[left] arr[y] -= 1 if arr[y] == 0: k -= 1 left += 1return len(fruits) - left # n - 1 - left + 1
第四课
390. 消除游戏
class Solution:def lastRemaining(self, n: int) -> int:# 方法一:模拟 转成 list 会超时arr = range(1, n + 1) # 可迭代对象,用一个生成一个while len(arr) > 1:arr = arr[1::2][::-1]return arr[0]# 方法二flag, a, step = True, 1, 1while n > 1: if flag or n & 1: a += step flag = not flagn >>= 1step <<= 1 return a# 方法三:递归return 1 if n == 1 else 2 * (n // 2 + 1 - self.lastRemaining(n // 2))
1652. 拆炸弹
class Solution:def decrypt(self, code: List[int], k: int) -> List[int]:n = len(code)ans = [0] * nif k == 0: return ansres = []code += codeif k > 0:l, r = 1, kelse:l, r = n + k, n - 1w = sum(code[l:r+1])for i in range(n):res.append(w)w -= code[l]w += code[r + 1]l, r = l + 1, r + 1return res
2516. 每种字符至少取 K 个
第五课
88. 合并两个有序数组
1768. 交替合并字符串
class Solution:def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:i, j = m - 1, n - 1for k in range(m+n-1,-1,-1):if j == -1: break # 如果 nums2 移完了结束if i == -1 or nums1[i] < nums2[j]: # 如果 nums1 移完了,接着移 num2nums1[k] = nums2[j]j -= 1else:nums1[k] = nums1[i]i -= 1
2022. 将一维数组转变成二维数组
class Solution:def construct2DArray(self, original: List[int], m: int, n: int) -> List[List[int]]:return [original[i:i + n] for i in range(0, len(original), n)] if len(original) == m * n else []
915. 分割数组
class Solution:def partitionDisjoint(self, nums: List[int]) -> int:n = len(nums)# 三次遍历# left, right = [0] * n, [0] * n# left[0], right[-1] = nums[0], nums[-1]# for i in range(n - 2, -1, -1):# right[i] = min(right[i + 1], nums[i])# for i in range(1, n):# left[i] = max(left[i - 1], nums[i])# for i in range(n):# if left[i] <= right[i+1]:# return i + 1# 二次遍历# right = [0] * n# max_, right[-1] = 0, nums[-1]# for i in range(n - 2, -1, -1):# right[i] = min(right[i + 1], nums[i])# for i in range(n - 1):# max_ = max(max_, nums[i])# if max_ <= right[i + 1]:# return i + 1# 一次遍历pos, max_, left = 1, nums[0], nums[0]for i, x in enumerate(nums):max_ = max(max_, x)if x < left:left = max_pos = i + 1return pos
练习
807. 保持城市天际线
class Solution:def maxIncreaseKeepingSkyline(self, grid: List[List[int]]) -> int:row = list(map(max, grid))col = list(map(max, zip(*grid)))return sum(min(row[i], col[j]) - h for i, r in enumerate(grid) for j, h in enumerate(r))
1716. 计算力扣银行的钱
等差数列的通项公式为:an = a1 + (n - 1) d
前n项和公式为:Sn = na1 + n (n - 1) d / 2 或 Sn = n (a1 + an) / 2
class Solution:def totalMoney(self, n: int) -> int:# w, d = divmod(n, 7) # res = w * 28 + w * (w - 1) * 7 // 2 # 整周计算# res += d * (w + 1) + d * (d - 1) * 1 // 2 week, day, res = 0, 1, 0 for i in range(n):res += week + dayday += 1if day == 8:day = 1week += 1return res
1995. 统计特殊四元组
class Solution:def countQuadruplets(self, nums: List[int]) -> int: res = 0n = len(nums)for i in range(n-3):for j in range(i+1,n-2):for k in range(j+1,n-1):for l in range(k+1,n):if nums[i]+nums[j]+nums[k] == nums[l]:res += 1return res
372. 超级次方
模运算对于乘法与加法满足交换律与结合律
(a ∗ b) % c = (a % c) ∗ (b % c) % c
pow(x, y[, z])
如果z在存在,则再对结果进行取模,其结果等效于 pow(x, y) % z
pow(a, 123) = pow(a, 3) * pow(pow(a, 12), 10) # 123 = 12 * 10 + 3
class Solution:def superPow(self, a: int, b: List[int]) -> int:return pow(a, b.pop()) * pow(self.superPow(a, b), 10) % 1337 if b else 1
279. 完全平方数
方法一:数学
四平方定理: 任何一个正整数都可以表示成不超过四个整数的平方之和。
推论: if and only if n is not of the form n = 4a ( 8 b + 7 ) for integers a and b.
当且仅当 n ≠ 4 k × ( 8 m + 7 ) n \neq 4^k \times (8m+7) n=4k×(8m+7) 时,n 可以被表示为至多三个正整数的平方和。
class Solution:def numSquares(self, n: int) -> int: sqr = int(sqrt(n))if n == sqr * sqr: return 1# 4 * x**2 = (2*x) ** 2 while n % 4 == 0:n >>= 2if n & 7 == 7: return 4 # n & 7 等价于 n % 8i = 0while i*i < n:j = int(sqrt(n - i*i))if i*i + j*j == n: return 2i += 1return 3
方法二:动态规划
f[i] 表示最少需要多少个数的平方来表示整数 i。
这些数必然落在区间 [ 1 , n ] [1,\sqrt{n}] [1,n]。枚举这些数,假设当前枚举到 j,那么还需要取若干数的平方,构成 i − j 2 i-j^2 i−j2 。此时子问题和原问题一样,规模更小,符合了动态规划的要求。
状态转移方程:
f [ i ] = 1 + min j = 1 ⌊ i ⌋ f [ i − j 2 ] f[i]=1+\min_{j=1}^{\lfloor\sqrt{i}\rfloor}{f[i-j^2]} f[i]=1+minj=1⌊i⌋f[i−j2]
边界条件 f [ 0 ] = 0 f[0]=0 f[0]=0
因为计算 f [ i ] f[i] f[i] 时所需要用到的状态仅有 f [ i − j 2 ] f[i-j^2] f[i−j2],必然小于 i,因此只需要从小到大地枚举 i 来计算 f [ i ] f[i] f[i] 即可。
class Solution:def numSquares(self, n):if n == int(sqrt(n)) ** 2: return 1dp = [inf for i in range(n + 1)] # 4dp[0] = 0for i in range(n + 1):j = 1while i + j*j <= n:dp[i + j*j] = min(dp[i + j*j], dp[i] + 1)j += 1return dp[n]
2239. 找到最接近 0 的数字
class Solution:def findClosestNumber(self, nums: List[int]) -> int:ans = inffor x in nums:if abs(x) == abs(ans): ans = max(x, ans)elif abs(x) < abs(ans): ans = x return ans
2432… 处理用时最长的那个任务的员工
class Solution:def hardestWorker(self, n: int, logs: List[List[int]]) -> int:ans = pre = most = 0for i, t in logs: dif = t - prepre = tif most < dif or most == dif and ans > i:ans = imost = difreturn ans
1610. 可见点的最大数目
在视角 angle 范围内内最多的点数。
location 为极点,刚好位于 location 的点单独进行统计,计算其它所有点的极角,然后排序。
在极坐标系中,平面上任何一点到极点的连线和极轴的夹角叫做极角。
极坐标和直角坐标的互化:
函数「atan2」的返回值范围为 [−π,π],它的覆盖范围为 2π。将 angle 转换成弧度。
由于存在 d p i + angle > π d_{p_i} + \textit{angle} > π dpi+angle>π 的情况,可以在原数组中将每个元素 d p i + 2 π d_{p_i} + 2π dpi+2π 添加到原数组的后面,这样即可防止反转的问题。
class Solution:def visiblePoints(self, points: List[List[int]], angle: int, location: List[int]) -> int:same, polar = 0, []for p in points:if p == location: same += 1else:polar.append(atan2(location[1] - p[1], location[0] - p[0]))polar.sort()polar += [p + 2 * pi for p in polar]arc = angle * pi / 180# 二分查找# return max((bisect_right(polar, p + arc) - i for i, p in enumerate(polar)), default=0) + same# 滑动窗口n, maxCount, right = len(polar), 0, 0for i in range(n//2):while right < n and polar[right] <= polar[i] + arc:right += 1maxCount = max(maxCount, right - i)return maxCount + same
相关文章:
python 02 List
Python 1-14 列表 第一课 1437. 是否所有 1 都至少相隔 k 个元素 class Solution:def kLengthApart(self, nums: List[int], k: int) -> bool:cnt k # 处理第一个 1for i, x in enumerate(nums):if x 1:if cnt < k: return Falsecnt 0 # 遇到 1 从新记数else: cnt …...
【秋招笔试】09.28科大讯飞秋招(已改编)-研发岗
🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 本次的三题全部上线…...
[SAP ABAP] 锁对象
在SAP中使用锁对象,用于避免在数据库中插入或更改数据时出现不一致的情况 1.创建锁对象 数据准备 学校表(ZDBT_SCH_437) 使用事务码SE11创建锁对象 点击"锁对象"单选按钮,输入以E开头的锁定对象的名称,然后点击创建按钮 锁对象名…...
Docker快速部署RabbitMq教程
1、拉取RabbitMQ镜像 docker pull rabbitmq:management RabbitMQ Management 插件为 RabbitMQ 提供了一个基于 Web 的用户界面(Management UI),允许你通过浏览器来监控、管理 RabbitMQ 实例。 因为docker默认是使用的是Docker Hub的官方镜…...
解决银河麒麟V10中/data目录执行权限问题
解决银河麒麟V10中/data目录执行权限问题 1、问题描述2、解决方案步骤一:编辑fstab文件步骤二:重启系统步骤三:验证更改 3、总结 💖The Begin💖点点关注,收藏不迷路💖 在使用银河麒麟桌面操作系…...
画两个数的平方和的曲线
代码1: from mpl_toolkits import mplot3d import numpy as np import matplotlib.pyplot as plt# Creating dataset x np.outer(np.linspace(-3, 3, 32), np.ones(32)) y x.copy().T # transpose z (x **2 y **2 )# Creating figure fig plt.figure(figsize …...
问:进程/线程上下文切换场景及相关概念?
进程、线程以及上下文切换是操作系统和并发编程中不可或缺的概念。这些概念不仅理论意义重大,而且在实际应用中起着至关重要的作用。掌柜将通过具体场景,探讨它们之间的关联以及上下文切换过程。_ 一、进程与线程 进程(有时也称为任务&…...
神经网络(一):神经网络入门
文章目录 一、神经网络1.1神经元结构1.2单层神经网络:单层感知机1.3两层神经网络:多层感知机1.4多层神经网络 二、全连接神经网络2.1基本结构2.2激活函数、前向传播、反向传播、损失函数2.2.1激活函数的意义2.2.2前向传播2.2.3损失函数、反向传播2.2.4梯…...
卸载apt-get 安装的PostgreSQL版本
文章目录 卸载apt-get 安装的PostgreSQL版本查找已安装的PostgreSQL包卸载PostgreSQL:检查并删除残留文件验证卸载 卸载apt-get 安装的PostgreSQL版本 卸载通过apt-get安装的PostgreSQL 就版本,可以按照以下步骤进行。 查找已安装的PostgreSQL包 在卸…...
低代码用户中心:构建高效便捷的用户管理平台
什么是低代码用户中心? 低代码用户中心是一种利用低代码开发平台构建的用户管理系统,允许企业快速创建、部署和管理用户信息、权限及互动记录。通过可视化界面和预置组件,企业可以在短时间内实现灵活的用户管理解决方案,而无需编…...
3款免费的GPT类工具
前言 随着科技的飞速发展,人工智能(AI)的崛起与发展已经成为我们生活中不可或缺的一部分。它的出现彻底改变了我们与世界互动的方式,并为各行各业带来了前所未有的便利。 一、Kimi 网址:点我前往 国产AI模型Kimi是一…...
Mixture-of-Experts (MoE): 条件计算的诞生与崛起【上篇】
大型语言模型(LLM)的现代进步主要是缩放定律的产物[6]。 假设模型是在足够大的数据集上训练出来的,那么随着底层模型规模的增加,我们会看到性能的平滑提升。 这种扩展规律最终促使我们创建了 GPT-3 以及随后的其他(更强…...
【算法】分治:归并排序之LCR 170.交易逆序对的总数(hard)
系列专栏 双指针 模拟算法 分治思想 目录 1、题目链接 2、题目介绍 3、解法 4、代码 1、题目链接 LCR 159. 库存管理 III - 力扣(LeetCode) 2、题目介绍 在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一…...
2024.9.28 作业+思维导图
widget.cpp #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {this->setFixedSize(320,448);this->setWindowFlag(Qt::FramelessWindowHint);//QPushButtonQPushButton *PushButton1 new QPushButton("登录",this);PushButto…...
树莓派外挂Camera(基操)(TODO)
(TODO) 手上有OV5647,OV2640,看这次能不能驱动吧。。。 树莓派3B CSI摄像头配置-阿里云开发者社区 你可以使用树莓派3B的CSI接口连接相机模块。首先,确保相机模块正确连接到CSI接口。然后,使用raspi-config…...
讯飞星火编排创建智能体学习(二)决策节点
目录 概述 决策节点 文生图节点 连接节点 测试结果 概述 在上一篇博文讯飞星火编排创建智能体学习(一)最简单的智能体构建-CSDN博客,我介绍了编排创作智能体,这篇来介绍一下“决策节点”。 决策节点 在编排创作智能体中&…...
YOLOv5改进:Unified-loU,用于高品质目标检测的统一loU ,2024年8月最新IoU
💡💡💡现有IoU问题点:IoU (Intersection over Union)作为模型训练的关键,极大地显示了当前预测框与Ground Truth框之间的差异。后续研究者不断在IoU中加入更多的考虑因素,如中心距离、纵横比等。然而,仅仅提炼几何差异是有上限的;而且新的对价指数与借据本身存在潜在…...
力扣 简单 112.路径总和
文章目录 题目介绍题解 题目介绍 题解 class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {// 只在最开始的时候判断树是否为空if (root null) {return false;}targetSum - root.val;if (root.left null && root.right null) { // root 是…...
OpenMV与STM32通信全面指南
目录 引言 一、OpenMV和STM32简介 1.1 OpenMV简介 1.2 STM32简介 二、通信协议概述 三、硬件连接 3.1 硬件准备 3.2 引脚连接 四、软件环境搭建 4.1 OpenMV IDE安装 4.2 STM32开发环境 五、UART通信实现 5.1 OpenMV端编程 5.2 STM32端编程 六、SPI通信实现 6.1 …...
Python库matplotlib之二
Python库matplotlib之二 figureAxessubplot figure matplotlib.pyplot.figure(numNone, figsizeNone, dpiNone, facecolorNone, edgecolorNone, frameonTrue, FigureClass<class ‘matplotlib.figure.Figure’>, clearFalse, **kwargs) num,int 或 str 或 fi…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
