HC-SR04超声波传感器:从基础测距到高级感知应用的深度解析

Java实现最大连续子数组和 1 问题描述 给定一个整数数组,数组里可能有正数、负数和零。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。例如,如果输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},那么输出为该子数组的和18。 2 解决方案 2.1 蛮力枚举法 package com.liuzhen.array_2; public c... 阅读详情

1. 项目概述:从“测距”到“感知”的HC-SR04探索

如果你玩过Arduino或者树莓派,大概率听说过HC-SR04这个模块。它太常见了,以至于很多人把它简单地当作一个“测距传感器”来用,接上几根线,跑个示例代码,看到串口打印出距离数值,项目就算完成了。但在我过去十多年的嵌入式开发和创客项目经验里,这种用法只挖掘了它不到一半的潜力。HC-SR04超声波传感器,本质上是一个 高性价比的声波雷达前端 。它的核心价值不在于“测量一个静止物体的距离”,而在于通过持续、快速的声波探测,为我们构建一个低成本的、非接触式的 空间感知能力 。

这个模块能做的远不止告诉你前面20厘米处有个障碍物。通过巧妙的算法和系统设计,它可以实现区域入侵检测、液位监控、物体尺寸粗略测量、甚至作为简单的速度传感器。其原理是利用超声波在空气中的传播特性,发射一束人耳听不到的声波脉冲,并接收其遇到物体反射回来的回波,通过计算声波往返的时间来推算距离。这个看似简单的“发射-接收-计时”循环,背后是电子设计、信号处理和软件算法的巧妙结合。无论是机器人避障、智能小车、自动门感应,还是我做过的一个自动浇花系统中的水位检测,HC-SR04都以极低的成本提供了可靠的解决方案。

接下来,我将带你超越简单的示例代码,深入拆解HC-SR04的工作原理、电路细节、驱动要点,并分享几个我实战中总结出的高级应用模式和避坑指南。无论你是刚入门的新手,还是想寻找更稳定方案的开发者,相信都能从中找到可以直接“抄作业”的干货。

2. HC-SR04核心原理与电路深度解析

2.1 超声波测距的物理与电子基础

要玩转一个传感器,首先要理解它“看见”世界的方式。HC-SR04使用的是频率约为40kHz的超声波。选择这个频率是经过权衡的:频率太低,波长太长,方向性差,精度低;频率太高,在空气中衰减非常快,有效测距会大幅缩短。40kHz是一个在成本、方向性和传播距离上取得平衡的工业常见值。

模块的核心工作流程是一个经典的“声纳”过程:

  1. 触发 :你给Trig引脚一个至少10微秒的高电平脉冲。
  2. 发射 :模块内部振荡电路被激活,驱动压电陶瓷超声波发射头(T)产生8个周期的40kHz脉冲串。
  3. 传播与反射 :这束声波在空气中以约340米/秒(常温下)的速度传播,遇到物体后部分能量返回。
  4. 接收 :另一个压电陶瓷接收头(R)检测到返回的声波,模块内部接收放大电路开始工作。
  5. 回响 :模块从发射结束的瞬间开始,将Echo引脚拉高。
  6. 结束 :当接收电路确认收到有效的回波信号后,将Echo引脚拉低。
  7. 计算 :你通过单片机测量Echo引脚高电平的持续时间 t ,那么距离 d = (t * 声速) / 2 。除以2是因为声波走了往返路程。

这里有一个关键细节常被忽略: 模块内部有自动增益控制和噪声抑制电路 。这解释了为什么在复杂环境中它有时会失灵。当环境噪声(如其他频率的声波、电磁干扰)过大时,接收电路可能无法从噪声中分辨出有效的40kHz回波,导致要么没有输出(Echo始终为低),要么输出一个错误的长脉冲(误将噪声当作回波)。

2.2 模块引脚与内部电路猜想

HC-SR04通常有4个引脚:VCC、Trig、Echo、GND。虽然我们拿不到官方的详细原理图,但根据其行为和外部分析,可以推测其内部结构主要包括以下几个部分:

  • 发射部分 :由一个受Trig信号控制的振荡器驱动,产生40kHz的方波,经过功率放大后推动发射探头。
  • 接收部分 :接收探头产生的微弱电信号,首先会经过一个带通滤波器(中心频率40kHz),滤除大部分带外噪声。然后信号进入多级放大器,其中很可能包含自动增益控制(AGC)电路,以适应不同强度的回波。最后是一个比较器或检波电路,当信号强度超过某个阈值时,触发Echo引脚输出。
  • 逻辑控制部分 :一个简单的状态机,协调触发、发射、计时和回波输出。

理解这个“黑盒”模型非常重要。例如,为什么要求Trig脉冲至少10us?因为要确保内部振荡器能可靠启动。为什么有时靠近物体测不准?因为发射和接收探头有一定物理距离(约1-2厘米),当物体非常近时,反射回波可能直接进入接收头,或者声波在模块外壳上产生多次反射,导致计时混乱,这就是其 最小测距盲区(约2-3厘米) 的由来。

注意 :市面上有些兼容模块为了降低成本,可能简化了滤波和AGC电路,导致在电机干扰等嘈杂环境中性能急剧下降。选购时,可以注意观察接收探头后面的电路板,元件数量较多、有可调电阻(可能是灵敏度调节)的模块,通常性能更稳定。

2.3 关键电气参数与接口要点

驱动HC-SR04看似简单,但参数理解不到位极易导致测量不稳定。

  • 工作电压 :标称5V。虽然很多3.3V系统的单片机(如ESP32、STM32F103)的IO口在3.3V下也能触发它并读取Echo,但这属于非标操作。 Echo引脚输出的高电平是跟随VCC电压的 。如果你用5V供电,Echo高电平就是5V,直接接入3.3V单片机IO口有烧毁风险! 必须使用电平转换电路或分压电阻 。一个简单的方案是用两个电阻(如1kΩ和2kΩ)对Echo信号进行分压,将5V降至约3.3V。
  • 电流消耗 :静态电流小于2mA,工作时约15mA。对于电池供电项目,需要注意频繁测距的功耗。
  • 测量周期 :建议两次测量之间至少间隔60ms。这是为了确保上一次发射的声波完全消散,避免被当作本次的回波。频繁触发(如间隔小于20ms)是导致测量值乱跳的常见原因之一。
  • 测量角度 :约15度。这不是一个严格的锥形,而是声压强度分布。中心轴线上的物体反射信号最强,测距最准;边缘的物体可能无法被检测到或距离误差较大。

接口电平安全连接方案(以3.3V单片机为例) :

HC-SR04         3.3V MCU (如ESP32)
VCC  ----------  5V电源(需外部提供)
Trig ----------  GPIO (直接连接,3.3V高电平足以触发)
Echo ----------  |---[1kΩ电阻]--- GPIO
                 |
                GND
                 |
                [2kΩ电阻]
                 |
                GND
GND  ----------  共地

这个分压电路将Echo的5V高电平分压至约 5V * (2k/(1k+2k)) ≈ 3.3V,安全可靠。

3. 从基础驱动到稳定可靠的软件实现

3.1 基础驱动代码与潜在陷阱

几乎所有的入门教程都会给你类似下面的Arduino代码:

const int trigPin = 9;
const int echoPin = 10;

void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);
  float distance = duration * 0.034 / 2;

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
  delay(100);
}

这段代码能工作,但非常脆弱。 pulseIn 函数是阻塞的,它会一直等待Echo变高,直到超时(默认1秒)。如果模块因故障没有输出回波(比如物体超出范围、表面吸声、角度不对),你的程序就会在这里卡住1秒钟!对于需要实时响应的机器人来说,这是灾难性的。

3.2 进阶:超时处理与状态机驱动

一个健壮的驱动必须包含超时处理。我们可以用 pulseIn 设置超时参数,或者更高效地,使用中断和定时器自己实现。

方案一:带超时的pulseIn

long duration = pulseIn(echoPin, HIGH, 30000); // 超时30ms,对应约5米距离
if (duration == 0) {
    // 超时处理:物体超出最大量程或检测失败
    distance = -1; // 或一个特殊值
} else {
    distance = duration * 0.0343 / 2; // 0.0343是更精确的声速系数(25°C时)
}

将超时设置为略大于最大测量距离所需时间(如5米约需30ms),可以避免程序长时间阻塞。

方案二:中断+定时器非阻塞驱动(更专业) 对于ESP32、STM32等高级单片机,使用中断可以获得最佳性能。思路是:

  1. 触发Trig后,启动一个定时器(或记录微秒数 startMicros )。
  2. 将Echo引脚配置为上升沿和下降沿中断。
  3. 在Echo的 上升沿中断 里,记录时间 t_rise 。
  4. 在Echo的 下降沿中断 里,记录时间 t_fall ,计算持续时间 t_fall - t_rise ,并清除上升沿时间标记。
  5. 设置一个“看门狗”定时器,如果在触发后一定时间内(如50ms)没有收到上升沿或下降沿,则判定为超时。

这种方法的优点是 完全非阻塞 ,主循环可以自由执行其他任务,只在测量完成时获取结果。代码稍复杂,但这是产品级应用的必备。

3.3 软件滤波:让数据变得“平滑”

原始的距离数据通常是跳动的,尤其是对粗糙表面或远处物体测量时。直接使用原始值会导致控制系统抖动。必须加入软件滤波。

1. 滑动平均滤波(最简单有效)

#define FILTER_SIZE 5
float distance_buffer[FILTER_SIZE] = {0};
int buffer_index = 0;

float applyMovingAverage(float new_distance) {
    distance_buffer[buffer_index] = new_distance;
    buffer_index = (buffer_index + 1) % FILTER_SIZE;

    float sum = 0;
    for (int i = 0; i < FILTER_SIZE; i++) {
        sum += distance_buffer[i];
    }
    return sum / FILTER_SIZE;
}

在 loop 中,将计算出的 distance 传入这个函数,得到平滑后的值。 FILTER_SIZE 越大,越平滑但响应越慢,通常取5-10。

2. 中值滤波结合范围限制(抗突发干扰) 有时会有单次极大的跳变(比如测到了错误的远处回波)。可以记录最近N次值,排序后取中间值。同时,可以加入物理范围判断:如果本次测量值与前次差值大于某个阈值(如50cm),且不在合理加速度范围内,则视为无效值丢弃,沿用上次有效值。

3. 卡尔曼滤波(高阶选择) 对于移动机器人等动态系统,卡尔曼滤波能结合测量值和系统运动模型,给出最优估计。但这需要数学模型,实现较复杂。对于HC-SR04,一个简化的一维卡尔曼滤波器就能显著提升数据质量,特别是在物体匀速运动时。

实操心得 :不要盲目追求复杂滤波。对于大多数创客项目, “滑动平均”+“突变剔除” 的组合已经足够好用。关键是 剔除明显不可能的野值 (比如从10cm瞬间跳到300cm)。我常用的逻辑是:如果当前值与前一个滤波后的值相差超过最大可能物理变化(根据物体最大速度估算),则忽略本次采样。

4. 超越测距:HC-SR04的创造性应用实例

掌握了稳定驱动后,我们就可以玩些花样了。HC-SR04的潜力在于持续的时序数据流。

4.1 应用一:区域入侵检测与人数统计

单纯判断距离是否小于阈值来做感应,容易误触发。更可靠的方法是 划分距离区间并监测状态持续时长 。

场景 :办公室入口是否有人经过。 实现 :

  1. 在门口固定安装传感器,测量到对面墙体的距离作为基准值 D_base (例如200cm)。
  2. 当有人走入探测区域,测量值会变小。我们设定一个触发阈值 D_trigger (例如170cm)。
  3. 关键逻辑 :当测量值连续N次(例如5次,对应约0.5秒)都小于 D_trigger ,才判定为“有人进入”。同样,当测量值连续N次恢复到 D_base 附近,才判定为“人已离开”。
  4. 通过记录“进入”和“离开”事件,可以实现简单的进出计数。

这种“持续判断”逻辑能有效过滤掉门口快速挥手或小动物经过引起的误报。代码上就是一个简单的状态机。

4.2 应用二:液位监测

这是HC-SR04非常经典的非接触式应用。将传感器垂直安装在容器顶部,向下测量到液面的距离。

挑战与解决方案 :

  • 挑战1:泡沫、蒸汽干扰 。液体表面的泡沫或蒸汽会散射和吸收超声波,导致测量失败或不准。
    • 方案 :加强软件滤波(增大滑动平均窗口),并设置一个“有效测量区间”。只有落在容器高度范围内的值才被采纳。连续多次测量失败时,输出“错误”状态而非最后一个错误值。
  • 挑战2:容器内壁反射 。狭窄的容器内,声波可能在侧壁间多次反射,提前返回。
    • 方案 :使用 声波导管 。用一根PVC管或橡胶管将传感器探头与容器顶部连接,引导声波垂直向下发射和接收,隔绝侧壁干扰。这是工程上非常有效的一招。
  • 校准 :先测量空容器的高度 H_empty ,再测量满容器的高度 H_full 。液位百分比 = (H_empty - current_distance) / (H_empty - H_full) * 100% 。

4.3 应用三:物体宽度粗略测量与速度估算

宽度测量 :让物体从传感器前匀速通过。记录下测量值小于阈值的开始时间 t1 和结束时间 t2 。已知物体运动速度 v ,则物体宽度 w ≈ v * (t2 - t1) 。这需要配合编码器或其他速度传感器,适用于传送带等场景。

速度估算(对向运动) :假设物体沿传感器轴线方向运动。在极短时间间隔 Δt 内测量两次距离 d1 和 d2 。则物体的接近速度 v ≈ (d1 - d2) / Δt 。注意,这要求 Δt 非常小(如10ms),且测量本身要非常快速和精确,误差会比较大,仅适用于粗略估计。

4.4 应用四:多传感器组网与简易SLAM

单个传感器只能提供一条“射线”上的距离信息。使用多个HC-SR04组成阵列,可以获取一个扇面的距离数据。

  • 扇形扫描 :将2-4个传感器以不同角度(如30°间隔)安装在一个云台上,轮流触发读取,可以构建一个低分辨率的二维极坐标距离图。虽然精度和分辨率远不及激光雷达,但对于低成本的避障或区域地图构建(SLAM的雏形)已经很有价值。
  • 防冲突触发 :多个传感器同时工作时,一个传感器发射的声波可能被另一个传感器接收到,造成串扰。 必须分时复用 !确保在一个传感器的回波窗口完全结束后(等待超过最大量程对应时间,如30ms),再触发下一个传感器。可以通过一个全局调度器来管理它们的触发时序。

5. 实战避坑指南与高级调试技巧

5.1 常见问题与故障排查表

现象 可能原因 排查步骤与解决方案
读数恒为0或极小值 1. Echo引脚一直为高。
2. 物体距离太近,处于盲区。
3. 模块损坏。
1. 用逻辑分析仪或示波器看Echo信号。若无工具,可尝试在代码中读取Echo引脚电平。
2. 确保测量物体在2-3厘米以外。
3. 更换模块测试。
读数巨大或超时 1. 物体超出最大量程(通常4-5米)。
2. 物体表面吸声(如绒毛、海绵)。
3. 角度太大,反射信号太弱。
4. 环境噪声干扰。
1. 检查代码超时设置,确保能处理无回波情况。
2. 对被测物体表面,确保平整坚硬。
3. 调整传感器,使其正对物体。
4. 远离风扇、电机、继电器等噪声源。尝试给模块VCC和GND加一个10uF和0.1uF的并联电容滤波。
读数不稳定,跳动大 1. 供电不稳。
2. 触发间隔太短。
3. 测量表面粗糙或形状复杂。
4. 软件无滤波。
1. 使用稳压电源,电源线尽量短粗,靠近模块加电容。
2. 确保两次测量间隔大于60ms。
3. 这是物理限制,只能通过软件滤波(如滑动平均)缓解。
4. 务必添加软件滤波 。
与电机同时工作失灵 电机(尤其是有刷电机)产生强烈的电磁干扰和电源噪声。 1. 电源隔离 :为传感器和控制电路使用独立的电源或线性稳压器。
2. 信号隔离 :使用光耦隔离Trig和Echo信号线。
3. 物理隔离 :尽量让传感器远离电机和驱动线,信号线使用双绞线。
在特定距离出现固定错误值 可能是容器壁或其他固定物体的二次反射、多次反射造成的“鬼影”。 分析错误值是否与某个固定距离的反射路径吻合。改变传感器安装角度或位置,或加装声波导管,破坏规则的反射路径。

5.2 精度提升与温度补偿

声速 v 随温度 T (摄氏度)变化: v = 331.4 + 0.606 * T m/s。常温25°C时,声速约346m/s,计算系数是0.0346;0°C时是0.0331。温差20度会导致约3.4%的测量误差,对于要求高的应用(如精确液位测量)不可忽视。

实现温度补偿 :

  1. 添加一个温度传感器(如DS18B20)测量环境温度。
  2. 实时计算声速: speed_of_sound = 331.4 + 0.606 * temperature_celsius
  3. 距离计算公式变为: distance_cm = (duration_us / 1000000.0) * speed_of_sound * 100 / 2.0

5.3 极端环境下的生存之道

  • 户外使用 :避免雨雪直接打在探头上,水滴会严重影响声波传播。可以加一个小的防水罩,但注意不要遮挡声波路径。极端温度会影响探头性能。
  • 粉尘/油污环境 :探头表面堆积灰尘油污会衰减信号。需要定期清洁,或选用带有防护膜的特殊型号。
  • 多传感器系统 :如前所述,严格分时触发,并考虑物理安装位置,避免声波直接“串门”。

HC-SR04是一个伟大的工具,它用极低的成本打开了物理世界感知的一扇门。它的价值不在于精度有多高,而在于其可靠性和可访问性。通过深入理解其原理,实施稳健的驱动和滤波策略,并发挥创意拓展其应用边界,这个小小的模块能在无数项目中成为可靠的“眼睛”。我至今仍记得第一次用它让小车自动避开桌沿时的兴奋,以及后来在工业原型中用一排水位传感器监控多个罐体的成就感。硬件之美,在于与软件思维的结合,让简单的元件焕发出解决复杂问题的力量。

最长递减子设有一个整数序列A1, A2, ... An,求这个序列中最长的递减子序列的长度M, 以及该序列可以划分成这种子序列的个数N 如序列: 300 250 252 275 200 138 245 折分成的子序列分别为 300 275 200 138 252 245 250 其中最长序列为: 300 275 200 138 所以M=4, N=3 详细介绍最长递减子设有一个整数序列A1, A2, ... An,求这个序列中最长的递减子序列的长度M, 以及该序列可以划分成这种子序列的个数N 如序列: 300 250 252 275 200 138 245 折分成的子序列分别为 300 275 200 138 252 245 250 其中最长序列为: 300 275 200 138 所以M=4, N=3 立即下载

相关推荐

n个整数的序列:a1,a2,...,an,求最大子段和

给定n个整数的序列:a1,a2,...,an,求最大子段和

数据子序列

i++) { //核心方法,窗口移动法;前面已经截取了子序列的长度,既定义了窗口,现在只需要将窗口按位移动至末尾即可,移动方法是获取一个新的数,放弃旧的数。即currentSum = currentSum + arr[i];currentSum = currentSum - arr[i-length]放弃旧的数,实现移动。length++) { //截取所需子序列长度。

2301_80273979的博客 551

DDR March系列算法整理

一

不吃鱼的猫的博客 1万+

动态规划的基础篇1--最大连续子序列和

上篇已经稍微介绍了什么是dp,接下来就是实战了。今天七夕节,祝愿大家有人陪伴,好好珍惜。。哎。。 给定一个数字序列A1,A2,A3,A4,A5,A6,A7,A8,A9.....An。求i,j(1&lt;=i&lt;=j&lt;=n)使得Ai++++++Ai最大,输出这个最大和 样例: -2  11 -4   13 -5 -2 显然11+(-4)+13=20为和最大的选取情况,因此最大和为2...

ZSS1753936255的博客 332

手把手教你用Simulink搭建DSOGI-PLL模型(附完整代码下载)

本文详细介绍了在Simulink中搭建高鲁棒性DSOGI-PLL模型的完整工程实践指南。针对传统锁相环在非理想电网下的不足,文章深入剖析了双二阶广义积分器锁相环(DSOGI-PLL)的核心原理与优势,并提供了从模块构建、系统组装到参数整定与测试验证的全流程手把手教程,附有完整代码下载,助力工程师应对谐波、电压跌落等复杂电网工况。

weixin_29223603的博客 388

NTFS分区变成RAW别乱修!正确数据恢复与修复方法详解

文件系统是操作系统管理存储数据的核心机制,NTFS作为Windows主流文件系统,一旦分区识别异常,常会显示为RAW格式。分区变RAW通常意味着文件系统入口信息损坏,而非数据物理消失,但若采用错误的修复方式,如直接对RAW分区执行chkdsk /f,可能因系统无法正确识别文件系统结构,导致写入操作落在错误偏移位置,二次破坏本可恢复的数据。正确的处理思路是:先停止一切写入操作,通过扇区级镜像备份保留原始现场,再分析DBR、分区表及$MFT状态,依据诊断结果选择修复或深度扫描恢复。实际排查中,常见问题如DBR记

weixin_31155097的博客 134

CNUOJ 0740 连续和最大

连续和最大 难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B 试题描述 给定一个整数序列a1、a2…an,求这个序列中的一个连续子序列,使得这个序列中的数的和最大。 输入 第一行,一个整数n。第二行,n个整数,a1、a2....

ab13410054283的博客 185

时序数据库避坑指南:TDengine与IoTDB在车联网场景的7个关键对比

本文对比了时序数据库TDengine与IoTDB在车联网场景下的7个关键差异,包括数据模型设计、边缘-云端协同能力、车规级函数库、存储压缩算法等。通过真实案例和性能测试,帮助企业在新能源汽车大数据处理中选择合适的时序数据库,优化存储成本和实时告警性能。

rust6ferris的博客 453

连续子数组的最大和(Python)

问题:连续子序列最大和  给定一个数字序列[A1A2A3…An],求i,j(1&lt;=i&lt;=j&lt;=n)使得Ai…Aj和最大,  输出这个最大和(连续大子序列最大和)  例如:  输入:  L=[-2 ,6, -1, 5, 4, -7, 2, 3]  输入:  14 (即6,-1,5,4这个序列的和) 思路: 最大和连续子数组一定有如下几个特点: 1、第一个不为负数 2、如果前面数的...

bluewelkin的专栏 5241

Xilinx ERNIC RoCEv2 FPGA实现与QP队列深度解析

本文深入解析Xilinx ERNIC RoCEv2在FPGA上的实现,重点剖析QP队列对的管理机制与深度优化策略。通过Verilog代码示例和工程实战,详细介绍了如何实现高吞吐量、低延迟的RDMA硬件卸载方案,为金融交易和数据中心应用提供性能优化指导。

solidity8miner的博客 877

海康威视门禁考勤设备数据对接实战:从被动推送到主动拉取

本文深入探讨了海康威视门禁考勤设备数据对接的两种核心方案:HTTP推送与SDK主动拉取。文章对比了两种方式的适用场景、技术实现与优缺点,为开发者提供了从设备配置、代码编写到工程化部署的完整实战指南,帮助读者根据项目规模、网络环境及数据稳定性要求,做出最合适的技术选型。

weixin_29284657的博客 670

最大连续子序列和问题

针对每组测试数据,输出最大连续子序列的和,以及该最大连续子序列的起止位置。当最大连续子序列的长度为0时,序列的起止位置都输出为-1。如果有多个连续子序列的值为最大值,输出第一个连续子序列。,An,对其所有连续子序列求和,寻找累加和最大的序列。如果所有的整数都是负的,那么最大连续子序列的和为0。输入包括多组测试数据,每组测试数据一行,每行第一个为正整数n(0 < n

sylviiiiiia的博客 1095

组合预测 | Python实现LSTM-XGBoost长短期记忆网络组合极限梯度提升树股票价格预测

组合预测 | Python实现LSTM-XGBoost长短期记忆网络和极限梯度提升树股票价格预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 2353

最大连续和问题

给出一个长度为n的序列A1,A2,…,An,求最大连续和。换句话说,要求找到1<=i<=j<=n,使得Ai+Ai+1+…Aj尽量大。 暴力枚举实现 #include <iostream> using namespace std; int A[50]={5,9,7,3,4,1,5,8,6,7,3,6,4,0,8,6,7}; int main() { int n=50...

Alex 4387

高空抛物监控系统:基于YOLOv8的轨迹追踪与可视化系统

本文详细介绍了一种基于YOLOv8深度学习模型的高空抛物监控系统,该系统能够实时检测并追踪高层建筑抛掷物的运动轨迹。文章包含完整的系统设计思路、算法实现细节、数据集构建方法以及基于PyQt5的可视化界面开发过程。我们提供了完整的Python实现代码,并讨论了系统的性能优化策略和实际部署考量。此外,我们还推荐了几个公开可用的高空抛物数据集,并详细分析了系统的应用前景和技术挑战。

YOLO 446

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

最大连续子段和,最大连续m段和。动态规划。

首先是最大连续子段和的问题, 题目描述:求一个数组arr=[-2,1,-3,4,-1,2,1,-5,4],的最大连续的子段的和。 题解:使用动态规划,定义辅助数组dpc记录以当前元素结尾的最大连续的子段和。即dpc[i]表示的是在arr列表中以arr[i]结尾的最大连续的子段和。那么显然dpc[i]有两种情况,一个是arr[i]加在了arr[i-1]之后,那么此时最大的连续子段和dpc[i] = ...

xz的博客 1264

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

最大连续和

思想一:维护当前最大连续和 假如(i,j)是最大连续和,那么(x,i-1)的连续和一定是负数,(x是大于-1小于i-1的数)。(j+1,y)也一定是负数,(y>j+1&&y<n);那么维护当前最大连续和即可,如果维护的最大连续和为负数,那么重新开始维护。 #include <algorithm> #include <iostream> ...

weixin_30663391的博客 126

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

环状最大连续和

(最大连续和) 小学生一发 一道环状的最大连续和。 蒜厂年会 题目描述: 在蒜厂年会上有一个抽奖,在一个环形的桌子上,有nnn个纸团,每个纸团上写一个数字,表示你可以得到多少蒜币。但是这个游戏比较坑,里面竟然有负数,表示你要支付多少蒜币。因为这些数字都是可见的,所以大家都是不会出现的陪的情况。 游戏规则:每人只能抓一次,只能抓取一段连续的纸团,所有纸团是那个的数字和就是你可以获得的蒜币。 蒜头君作...

weixin_39393640的博客 562

最大连续子序列和

最大连续子序列和问题是个很老的面试题了,最佳的解法是O(N)复杂度,当然其中的一些小的地方还是有些值得注意的地方的。这里还是总结三种常见的解法,重点关注最后一种O(N)的解法即可。需要注意的是有些题目中的最大连续子序列和如果为负,则返回0;而本题目中的最大连续子序列和并不返回0,如果是全为负数,则返回最大的负数即可。 问题描述 求取数组中最大连续子序列和,例如给定数组为A={1, 3, -2,

__七把刀__ 6万+

求最大连续和问题

输入:数组a[n]输出:该数组中和最大的连续子序列,以及该最大和 int maxsub2(int* arr,int len)...{    int i,maxsum=INT_MIN,sum=0;    int beg=0,end=0,pos=0;    for(i=0;ilen;++i)    ...{            sum+=arr[i];            if(s

SeeSeaBee的专栏 2191

【POJ2750】最大连续和

【POJ2750】最大连续和 Description 给出一个含有N个结点的环,编号分别为1..N,环上的点带有权值(可正可负),现要动态的修改某个点的权值,求每次修改后环上的最大连续和,但不能是整个序列的和。 Input 第一行为一个整数N(4 第二行为N个用空格分开的整数; 第三行为一个整数M(4 接下来M行,每行两个整数A和B(-1000

袋鼠与蒟蒻 506

最大连续子段和

定义一个变量maxn初始化为无穷小,更新最大子段和,同时定义一个变量res初始化为0,表示当前子段的和.我们考虑x数组的第i个元素xi,如果当前子段和加上xi是一个大于等于0的数,那么当前的子段和一定对后面的元素有贡献,所以将xi加到res里,同时更新最大子段和maxn;反之,如果当前子段和res加上xi是一个负数,那么,加上后的子段和一定对后面的元素有副作用,此时抛弃当前子段和res,从xi1重新开始上述操作。−3−1−2由于resxi。

qq_73702550的博客 866

【leetcode】最大子序和 & 连续最大数组和 & 连续最大和

本篇章关于三道题求解:最大子序和 、连续最大数组和 、连续最大和。

阿琪 363

环上最大连续和

环上最大连续和 给定N,K以及一个环:A[1],A[2],A[3],…A[N],其中A[1]的左边是A[N]。 求该环上最大的连续子段和,要求选出的子段长度不超过K。 输入描述: 第一行两个整数N和K。 接下来一行,N个整数表示A[i]。 输出描述: 输出题目要求的最大连续和。 链接: https://www.nowcoder.com/questionTerminal/8db855bdae...

weixin_39393640的博客 523

最大连续字串和、积

求 最大连续字串和、积这个题目是在早期庞果的两个题目,由于这两个题目实现非常相似,所以我就将他们合并一起一起讨论了。 (1)最大字串和;          最大连续子串和问题是求一个整数串中的和,比如串A={1,2,-3,4,10,-5,-7,100,-8,9,-100},求串A的最大子串和。题目的大概意思就这样了。下面分析吧!       分析:其实碰到这道题我已开始就想到用枚

wingahi的专栏 866
上一篇: 开源无人机DIY:基于M5Stack的Stamp Fly模块化飞控套件全解析
下一篇: 端侧AI落地新样本:拆解韶音OpenFit 2 AI耳机技术实现与趋势
z-pan
博客等级 码龄11年 159粉丝 1346原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值