【Python 算法零基础 1.线性枚举】
我装作漠视一切,以为这样就可以不在乎
—— 25.3.17
一、线性枚举的基本概念
1.时间复杂度
线性枚举的时间复杂度为 O(nm),其中 n是线性表的长度。m 是每次操作的量级,对于求最大值和求和来说,因为操作比较简单,所以 m为 1,则整体的时间复杂度是 O(n)的。这是因为线性枚举需要遍历列表中的每个元素。在处理大规模数据时,可能需要使用更高效的算法来提高搜索速度。
2.优化算法
二分查找:如果线性表已经排序,可以使用二分搜索来提高搜索效率。
哈希表:可以使用哈希表来存储已经搜索过的元素,避免重复搜索。
前缀和:可以存储前 i 个元素的和,避免重复计算。
双指针:可以从两头开始搜索,提升搜索效率。
二、实战
1.1550. 存在连续三个奇数的数组
给你一个整数数组
arr
,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回true
;否则,返回false
。示例 1:
输入:arr = [2,6,4,1] 输出:false 解释:不存在连续三个元素都是奇数的情况。示例 2:
输入:arr = [1,2,34,3,4,5,7,23,12] 输出:true 解释:存在连续三个元素都是奇数的情况,即 [5,7,23] 。提示:
1 <= arr.length <= 1000
1 <= arr[i] <= 1000
方法一 线性枚举
思路与算法
遍历数组:代码通过一个
for
循环遍历数组arr
,从第二个元素开始,到倒数第二个元素结束。这样做的目的是为了确保在检查arr[i-1]
、arr[i]
和arr[i+1]
时不会越界。检查连续奇数:在每次循环中,代码检查当前元素
arr[i]
及其前一个元素arr[i-1]
和后一个元素arr[i+1]
是否都是奇数。这是通过取模运算% 2 == 1
来判断的。如果这三个元素都是奇数,则说明存在三个连续的奇数,函数立即返回True
。返回结果:如果遍历完整个数组都没有找到三个连续的奇数,则函数返回
False
。
class Solution:def threeConsecutiveOdds(self, arr: List[int]) -> bool:n = len(arr)for i in range(1, n - 1):if arr[i - 1] % 2 == 1 and arr[i] % 2 == 1 and arr[i+1] % 2 == 1:return Truereturn False
2.485. 最大连续 1 的个数
给定一个二进制数组
nums
, 计算其中最大连续1
的个数。示例 1:
输入:nums = [1,1,0,1,1,1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.示例 2:
输入:nums = [1,0,1,1,0,1] 输出:2提示:
1 <= nums.length <= 105
nums[i]
不是0
就是1
.
方法一 线性枚举
思路与算法
初始化变量:sumNum
:用于记录当前连续 1
的个数。maxNum
:用于记录遍历过程中找到的最长连续 1
的个数。
遍历数组:使用一个 for
循环遍历数组 nums
的每一个元素。如果当前元素是 0
,说明连续的 1
中断了,将 sumNum
重置为 0
。如果当前元素是 1
,将 sumNum
加 1
,表示当前连续 1
的个数增加了。更新最大值:在每次循环中,用 maxNum
记录当前找到的最长连续 1
的个数,通过 max(maxNum, sumNum)
实现。
返回结果:遍历结束后,maxNum
就是整个数组中最长的连续 1
的个数,将其返回。
class Solution:def findMaxConsecutiveOnes(self, nums: List[int]) -> int:n = len(nums)sumNum = 0maxNum = 0for i in range(n):if nums[i] == 0:sumNum = 0else:sumNum += 1maxNum = max(maxNum, sumNum)return maxNum
3.540. 有序数组中的单一元素
给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。
请你找出并返回只出现一次的那个数。
你设计的解决方案必须满足
O(log n)
时间复杂度和O(1)
空间复杂度。示例 1:
输入: nums = [1,1,2,3,3,4,4,8,8] 输出: 2示例 2:
输入: nums = [3,3,7,7,10,11,11] 输出: 10提示:
1 <= nums.length <= 105
0 <= nums[i] <= 105
方法一 线性枚举
思路与算法
特殊情况处理:如果数组长度为 1
,直接返回唯一的元素 nums[0]
,因为它一定是不重复的。
遍历数组:使用一个 for
循环遍历数组 nums
,从第二个元素开始,到倒数第二个元素结束(避免越界)。对于当前元素 nums[i]
,检查它是否与前后元素都不相等:如果 nums[i] != nums[i - 1]
且 nums[i] != nums[i + 1]
,则 nums[i]
就是唯一不重复的元素,直接返回。
边界情况处理:如果遍历结束后没有找到不重复的元素,说明不重复的元素可能在数组的边界:检查第一个元素 nums[0]
是否与第二个元素 nums[1]
不相等,如果是,则返回 nums[0]
。否则,返回最后一个元素 nums[n - 1]
。
class Solution:def singleNonDuplicate(self, nums: List[int]) -> int:n = len(nums)if n == 1:return nums[0]for i in range(1, n - 1):if nums[i] != nums[i - 1] and nums[i] != nums[i + 1]:return nums[i]if nums[0] != nums[1]:return nums[0]return nums[n - 1]
方法二 二分查找
题目要求设计出的算法必须满足 O(log n)
时间复杂度和 O(1)
空间复杂度
思路与算法
初始化指针:定义两个指针 l
和 r
,分别指向数组的起始位置和结束位置。
二分查找:在 while
循环中,计算中间位置 mid = (l + r) // 2
。
利用 mid ^ 1
来检查 nums[mid]
是否与它的配对元素相等:如果 mid
是偶数,mid ^ 1
就是 mid + 1
。如果 mid
是奇数,mid ^ 1
就是 mid - 1
。如果 nums[mid] != nums[mid ^ 1]
,说明不重复元素在 mid
的左侧,将 r
更新为 mid
。否则,说明不重复元素在 mid
的右侧,将 l
更新为 mid + 1
。
返回结果:当 l == r
时,循环结束,nums[l]
就是唯一不重复的元素。
^
是 按位异或(Bitwise XOR) 运算符。它的作用是对两个整数的二进制表示逐位进行异或运算,并返回结果。对于两个二进制位:
- 如果两个位相同(都是
0
或都是1
),结果为0
。- 如果两个位不同(一个是
0
,另一个是1
),结果为1
。
class Solution:def singleNonDuplicate(self, nums: List[int]) -> int:n = len(nums)l, r = 0, n - 1while l < r:mid = (l + r) // 2if nums[mid] != nums[mid ^ 1]:r = midelse:l = mid + 1return nums[l]
相关文章:
【Python 算法零基础 1.线性枚举】
我装作漠视一切,以为这样就可以不在乎 —— 25.3.17 一、线性枚举的基本概念 1.时间复杂度 线性枚举的时间复杂度为 O(nm),其中 n是线性表的长度。m 是每次操作的量级,对于求最大值和求和来说,因为操作比较简单,所以 …...
涨薪技术|Kubernetes(k8s)之Pod端口设置及资源配额
01端口设置 使用以下命令可以可以查看到到ports的子选项 [rootk8s-master01 ~]# kubectl explain pod.spec.containers.portsKIND: PodVERSION: v1RESOURCE: ports <[]Object>FIELDS:name <string> # 端口名称,如果指定,必须保证name在pod…...
七大常用智能家居协议对比
如果您不知道在项目中使用哪种智能家居通信协议,那么进入智能家居行业可能会很困难。如果没有合适的协议将其集成到智能家居生态系统中,智能家居设备将无法正常工作。否则,您将面临硬件和软件无法满足最终用户期望的风险。协议选择不当可能会…...
K8S快速部署
前置虚拟机环境正式部署BUG解决 前置虚拟机环境 每个虚拟机配置一次就好 #关闭防火墙 systemctl stop firewalld systemctl disable firewalld #关闭 selinux sed -i s/enforcing/disabled/ /etc/selinux/config # 永久 setenforce 0 # 临时 #关闭 swap swapoff -a # 临时 vi…...
TCP 三次握手四次挥手过程详解
注:本文为 “TCP 的三次握手与四次挥手” 相关文章合辑。 英文引文,机翻未校。 中文引文,未整理去重。 英文引文第二篇,实为国内《稀土掘金技术社区》文章,没检索到原文,此处 “出口转内销” 。 如有内…...
如何利用 Zeabur 实现 OceanBase 的一键部署
引言 Zeabur 是一个功能强大且即开即用的自动化部署平台,它不仅能迅速部署多种应用,还支持一键安装 MySQL、PostgreSQL 等数据库服务。 Zeabur 拥有众多国内外用户,如 AFFiNE、Bytebase 等企业客户,以及大量全栈和独立开发者。将…...
基于Springboot+服务器磁盘的本地文件存储方案
[local-file-system]基于服务器磁盘的本地文件存储方案 仅提供后端方案 github 环境 JDK11linux/windows/mac 应用场景 适用于ToB业务,中小企业的单体服务,仅使用磁盘存储文件的解决方案 仅使用服务器磁盘存储 与业务实体相结合的文件存储方案&…...
基于FPGA的3U机箱模拟量高速采样板ADI板卡,应用于轨道交通/电力储能等
板卡简介: 本板为模拟量高速采样板(ADI),主要用于电机转速和相电流检测,以实现电机闭环控制。 性能规格: 电源:DC5V,DC3.3V,DC15V,DC24V FPGA:…...
泰勒·斯威夫特(Taylor Swift)的音乐影响力与商业版图深度研究
泰勒斯威夫特的音乐影响力与商业版图深度研究 简介 泰勒斯威夫特(Taylor Swift)是当今流行音乐领域最具影响力的全球巨星之一。自少年时期出道以来,她在音乐风格、形象和商业战略上不断演变,从乡村音乐新人成长为引领流行文化的…...
神经网络微调技术解析
神经网络微调技术 微调(Fine-tuning)是迁移学习的核心技术,通过在预训练模型基础上调整参数,使其适应特定任务或领域。以下从传统方法、参数高效微调(PEFT)、新兴技术三个维度展开,覆盖主流技术…...
鸿蒙路由 HMRouter 配置及使用 三 全局拦截器使用
1、前期准备 简单封装一个用户首选项的工具类 import { preferences } from "kit.ArkData";// 用户首选项方法封装 export class Preferences {private myPreferences: preferences.Preferences | null null;// 初始化init(context: Context, options: preference…...
国科大——计网(0812)——考试真题
前沿: 此篇文章记录了国科大秋季学期计网(0812)课程的一些考试真题,某些题目的答案仅供参考,还请自行辨别。 备注: 计网的考试题一般都会多一道,每道题的分值相同,例如:…...
Feedback-Guided Autonomous Driving
Feedback-Guided Autonomous Driving idea 问题设定:基于 CARLA 的目标驱动导航任务,通过知识蒸馏,利用特权智能体的丰富监督信息训练学生传感器运动策略函数 基于 LLM 的端到端驱动模型:采用 LLaVA 架构并添加航点预测头&#…...
超参数优化算法:scikit-opt库、Scikit-Optimize库
1 scikit-opt库:https://www.cnblogs.com/luohenyueji/p/18333387 https://blog.csdn.net/weixin_45750972/article/details/124683402 a 差分进化算法 (Differential Evolution):一种基于群体搜索的优化算法,通过模拟生物进化的过程来寻找最…...
我与DeepSeek读《大型网站技术架构》- 大型网站架构技术一览与Web开发技术发展历程
文章目录 大型网站架构技术一览1. 前端架构2. 应用层架构3. 服务层架构4. 存储层架构5. 后台架构6. 数据采集与监控7. 安全架构8. 数据中心机房架构 Web开发技术发展历程一、静态HTML阶段二、CGI脚本模式阶段三、服务器页面模式阶段 大型网站架构技术一览 1. 前端架构 浏览器…...
解决QT_Debug 调试信息不输出问题
方式1 :手动通过添加环境变量解决 ->使用命令: QT_LOGGING_TO_CONSOLE1 qtcreator启动 ->如若还未输出qDebug调试信息 则在程序中引<QLoggingCategory>包 #include <QLoggingCategory> ->在程序入口添加 QLoggingCategory::defa…...
NebulaGraph3.3.0部署与配置
系统参数 8g 2核参考文档: https://docs.nebula-graph.com.cn/3.8.0/4.deployment-and-installation/2.compile-and-install-nebula-graph/2.install-nebula-graph-by-rpm-or-deb/静态IP配置 # 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33# 修改文件内容…...
oracle 基础知识之 多表查询
多表查询定义:当查询的数据并不是来源一个表时,需要使用多表连接操作完成查询。多表连接查询通过表之间的关联字段,一次查询出多个表的数据。多表查询包括了等值连接、左连接、右连接、完全连接。 1.等值连接 等值连接也称为简单连接…...
《论分布式系统架构设计及其应用》架构师论文
【摘要】 2022年3月,我参与了某金融科技公司“智能风控云平台”项目的研发工作,担任系统架构师职务,负责分布式系统架构设计与核心技术选型。该平台旨在为银行、保险等金融机构提供实时风险评估、反欺诈及数据服务,需支撑每秒十万…...
Matlab 汽车主动悬架LQR控制器设计与仿真
1、内容简介 Matlab 182-汽车主动悬架LQR控制器设计与仿真 可以交流、咨询、答疑 2、内容说明 略 1、研究背景 汽车悬架系统由弹性元件、导向元件和减振器组成,是车身与车轴之间连接的所有组合体零件的总称,也是车架(或承载式车身)与车桥(或车轮)之间一切力传递装置的总称,…...
JMeter 参数化工作原理说明
一、核心目标:让每条请求都能用不同数据 参数化的本质是让 JMeter 在发送请求时,自动替换变量为不同的值。例如: 模拟 100 个用户登录 → 每个用户使用不同的账号密码。模拟搜索不同关键词 → 每次请求自动更换关键词。 二、参数化如何工作…...
[免费]直接整篇翻译pdf工具-支持多种语言
<闲来没事写篇博客填补中文知识库漏洞> 如题,[免费][本地]工具基于开源仓库: 工具 是python!太好了,所以各个平台都可以,我这里基于windows. 1. 先把github代码下载下来: git clone https://githu…...
Python 鼠标轨迹算法 - 防止游戏检测
一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…...
Unity音乐内存优化
文章目录 音乐下载远程音乐 音乐 音乐文件如果只从工程目录里面读取,那有很多种方法可以优化,比如设置Load Type直接采用流式加载方式,内存直接降最小(但是记住,每种优化都是有对应的代价的,优化是一种平衡…...
hubilder打包ios app, 并上传TestFlight
目录 一 前提条件 不是该项目成员解决 1. 直接找到该项目的管理人员去设置你的账号 2. 直接重新生成APPID(一般不建议的,可以查看) 3. 如果是离职人员,可以让他将项目权限转让出来 - 如何转让应用 - DCloud问答 未申请ios证书和描述文件 APP ID 的…...
3个 Vue $set 的应用场景
大家好,我是大澈!一个喜欢结交朋友、喜欢编程技术和科技前沿的老程序员👨🏻💻,关注我,科技未来或许我能帮到你! 在 Vue2 中,由于 Object.defineProperty 的限制&#…...
3ds Max 导入到 After Effects 还原摄像机要注意事项--deepseek
我:dp我这有两个脚本分别是syn软件相机导出到max的和syn软件相机导出到ae的,你能看出差别来吗?如果我想把max里的相机导入到ae里,保持原来的位置方向,该怎么做 dp:从这两个脚本可以看出,3ds Ma…...
从零开始 | C语言基础刷题DAY3
❤个人主页:折枝寄北的博客 目录 1.打印3的倍数的数2.从大到小输出3. 打印素数4.打印闰年5.最大公约数 1.打印3的倍数的数 题目: 写一个代码打印1-100之间所有3的倍数的数字 代码: int main(){int i 0;for (i 1; i < 100; i){if (i % …...
SQL注入第7关
存在注入,需要使用单引号闭合 拥有root权限,secure_file_priv值为空,确定路径 http://127.0.0.1/sqli-labs-master/Less-7/?id1)) union select 1,"<?phpinfo();?>",3 into outfile "D:\\landui\\xp\\phpstudy_pro…...
Git使用和原理(3)
1.远程操作 1.1分布式版本控制系统 我们⽬前所说的所有内容(⼯作区,暂存区,版本库等等),都是在本地!也就是在你的笔记本或者 计算机上。⽽我们的 Git 其实是分布式版本控制系统!什么意思呢&a…...
从零搭建微服务项目Pro(第6-1章——Spring Security+JWT实现用户鉴权访问与token刷新)
前言: 在现代的微服务架构中,用户鉴权和访问控制是非常重要的一部分。Spring Security 是 Spring 生态中用于处理安全性的强大框架,而 JWT(JSON Web Token)则是一种轻量级的、自包含的令牌机制,广泛用于分…...
LeetCode 124.二叉树中的最大路径和
题目: 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点…...
结构型模式之适配器模式:让不兼容的接口兼容
在软件开发中,经常会遇到这样一种情况:系统的不同部分需要进行交互,但由于接口不兼容,导致无法直接使用。这时,适配器模式(Adapter Pattern)就能派上用场。适配器模式是设计模式中的结构型模式&…...
Python 中用T = TypeVar(“T“)这个语法定义一个“类型变量”,属于类型提示系统的一部分
T TypeVar("T") 这一语法规则定义了一个泛型类型变量 T,用于标记“某种类型”,让你可以写出既通用又类型安全的代码。 TypeVar(“T”) 会创建一个名为 T 的类型占位符,这个占位符可以在后续的函数、类或方法中用作泛型参数。泛型…...
uniapp移动端图片比较器组件,仿英伟达官网rtx光追图片比较器功能
组件下载地址:https://ext.dcloud.net.cn/plugin?id22609 已测试h5和微信小程序,理论支持全平台 亮点: 简单易用 使用js计算而不是resize属性,定制化程度更高 组件挂在后可播放指示线动画,提示用户可以拖拽比较图片…...
理解我们单片机拥有的资源
目录 为什么要查询单片机拥有的资源 所以,去哪些地方可以找数据手册 一个例子:STM32F103C8T6 前言 本文章隶属于项目: Charliechen114514/BetterATK: This is a repo that helps rewrite STM32 Common Repositorieshttps://github.com/C…...
接上一篇,C++中,如何设计等价于Qt的信号与槽机制。
看下面例子: class FileManager : public QObject {Q_OBJECTpublic:FileManager(QObject* parent nullptr) : QObject(parent) {}void changeFileName(const QString& newName) {fileName newName;emit fileNameChanged(fileName);}signals:void fileNameChan…...
redis分片集群如何解决高并发写问题的?
不使用分片集群,仅使用主从复制和哨兵模式下,可以有多个主从集群,但每个主从集群一般只有一个活跃的主节点并执行写操作,每个主从集群的数据也可能(应该)是不同的,同时每个主从集群存储的数据没…...
2025 linux系统资源使用率统计docker容器使用率统计docker监控软件Weave Scope安装weavescope
1.Weave Scope介绍 Weave Scope 是一款用于监控和可视化 Docker 容器、Kubernetes 集群以及分布式应用的强大工具。它的设计目标是帮助开发者和运维人员更好地理解和管理复杂的微服务架构。以下是 Weave Scope 的主要优点: 1. 实时可视化 Weave Scope 提供了一个直…...
Spring Boot 核心知识点深度详解:自动化配置 (Auto-configuration) - 解锁 Spring Boot 的 “魔法”
Spring Boot 核心知识点深度详解:自动化配置 (Auto-configuration) - 解锁 Spring Boot 的 “魔法” ✨ 自动化配置 (Auto-configuration) 是 Spring Boot 最核心的特性之一,也是它能够大幅简化 Spring 应用开发的关键所在。 它让 Spring Boot 应用能够…...
嵌入式Linux | 什么是 BootLoader、Linux 内核(kernel)、和文件系统?
01 什么是 BootLoader 呢? 它是个引导程序,也就是硬件复位以后第一个要执行的程序,它主要工作就是初始化操作系统运行的环境,比如说内存、定时器、缓冲器等,当这个工作做完以后,再把操作系统的代码加载…...
IP关联是什么?怎么避免?
在跨境电商的道路上,大家好!今天想和大家聊一聊一个非常重要的话题,那就是IP关联的问题。在商业活动中,了解如何避免IP关联对保护我们宝贵的商铺至关重要。接下来,我们将深入探讨IP关联的概念、影响及如何有效防止这一…...
【Agent】OpenManus-Prompt组件详细分析
1. 提示词架构概述 OpenManus 的提示词组件采用了模块化设计,为不同类型的智能体提供专门的提示词模板。每个提示词模块通常包含两种核心提示词:系统提示词(System Prompt)和下一步提示词(Next Step Prompt࿰…...
算数操作符、赋值操作符、单目操作符、强制类型转换
一、算术操作符(、 -、 *、 /、 %) • - * / %操作符都是双⽬操作符,有**两个操作数**的符号就叫做双目操作符 10 4| || | 操作数1 操作数2// - % / * 以此类推•操作符也被叫做:运算符 1. 符号、符号 - 和 符号* •…...
华为OD机试 - 九宫格按键输入 - 逻辑分析(Java 2023 B卷 200分)
题目描述 九宫格按键输入,输出显示内容。有英文和数字两个模式,默认是数字模式。数字模式直接输出数字,英文模式连续按同一个按键会依次出现这个按键上的字母。如果输入“/”或其他字符,则循环中断。 输入描述 输入范围为数字0…...
DeepSeek大模型在政务服务领域的应用
DeepSeek大模型作为国产人工智能技术的代表,近年来在政务服务领域的应用呈现多点开花的态势。通过多地实践,该技术不仅显著提升了政务服务的效率与智能化水平,还推动了政府治理模式的创新。以下从技术应用场景、典型案例及发展趋势三个维度进…...
卷积神经网络 - 一维卷积、二维卷积
卷积(Convolution),也叫褶积,是分析数学中一种重要的运算。在信号处理或图像处理中,经常使用一维或二维卷积,本博文我们来学习一维卷积和二维卷积。 理解一维卷积和二维卷积的核心在于把握维度对特征提取方式的影响。我们从数学定…...
【NLP 33、实践 ⑦ 基于Triple Loss作表示型文本匹配】
目录 一、配置文件 config.py 二、 数据加载文件 loader.py 1.加载数据 Ⅰ、加载字表或词表 Ⅱ、加载标签映射表 Ⅲ、封装数据 2.处理数据 Ⅰ、补齐或截断 Ⅱ、定义类的特殊方法 ① 返回数据集大小 ② 生成随机训练样本 ③ 根据索引返回样本 Ⅲ、加载和处理训练样本和测试样本 …...
基于CNN的多种类蝴蝶图像分类
基于CNN的多种类蝴蝶图像分类🦋 基于卷积神经网络对64992786张图像,75种不同类别的蝴蝶进行可视化分析、模型训练及分类展示 导入库 import pandas as pd import os import matplotlib.pyplot as plt import seaborn as sns import numpy as np from …...
Linkreate wordpressAI智能插件-自动生成原创图文、生成关键词、获取百度搜索下拉关键词等
Linkreate wordpressAI插件核心功能亮点 文章生成与优化 自动化文章生成:利用 AI 技术,根据关键词生成高质量文章。 支持指定长度和要求,异步生成不阻塞操作。 且 AI 可自动生成精准的 tag 标签,利于 SEO 优化。 批量生成文章…...