编程竞赛必备算法精解

编程竞赛必备算法精解

枚举

例题

字符计数

        

反倍数

洁净数

扫雷

模拟

例题

饮料换购

图像模糊

螺旋矩阵

回文日期

长草

注意:该参考代码仅通过80%,仅作学习模拟的参考

最大距离

进制转换

例题

前缀和

一维前缀和

前缀和:对于一个长度为n的列表a,前缀和为:

 sum[i]= a[0]+a[1]+…+a[i]

例如:a= [1,3,4,2,5],前缀和数组sum=[1,4,8,10,15]

前缀和的性质:

Sum[i]=Sum[i-1]+a[i]

a[l] +…+a[r]= Sum[r]-Sum[l-1]

第一条性质用于处理出前缀和

第二条性质可以在O(1)的时间内求出区间和

前缀和实现一:

实现二

例题

区间次方和

代码如下:

小郑的蓝桥平衡串

代码如下:

二维前缀和

前缀和:对于N*M的二维列表a(下标统一从1开始),前缀和为:

例题

统计子矩阵

注:以下参考代码仅通过70%数据,仅作学习二维前缀和参考

差分

一维差分数组

对于一个数组a[], 差分数组diff[]的定义是: diff[i] = a[i] - a[i -1]

对差分数组做前缀和可以还原为原数组:

diff[1]+diff[2]+diff[3]+ ... +diff[i]
=a[1]+(a[2]-a[1])+(a[3]-a[2])+ ... +(a[i]-a[i-1])
= a[i]

例题

代码如下:

二维差分数组

离散化

离散化: 不关注数字本身,只关注大小关系时,利用排名代替原数据。

本质: 一种哈希,将离散的数字、浮点数,转换成1-n

例如:【100,200,300,400,500】,离散化后为【1,2,3,4,5】

所有仅关注偏序关系的题目,均可以先离散化

数组a的离散化步骤:

1、把a拷贝一份设置为b

2、对b排序、去重

3、把a中每个元素设置为b数组中的下标(二分查找)

法一:使用二分查找

注:

法二:使用字典

贪心

例题

谈判

  

糖果混合

代码如下

纪念品分组

代码如下:

翻硬币

代码如下:

日志统计

代码:

字典使用

构造

例题

大衣的邻近和

代码如下:

二分

浮点二分

例:估计根二的值

二分答案

题目所求答案(一般为整数)具有单调性质,采用猜答案+二分
1、确定初始范围[left,right]
2、当left≤right时:
      mid =(left+right)//2
      check(mid):判断mid是否合法:(定义check函数,什么时候是合法,根据题目的单调定来确定)
      如果合法:更新ans=mid
      根据合法调整左右区间,调整策略为二选一:left=mid+1,   right = mid -1

例题

分巧克力:

代码如下:

跳石头

代码如下:

肖恩的乘法表

代码如下:

双指针

反向扫描

例题

纪念品分组
回文判定

         

同向扫描

例题

美丽的区间

挑选子串

位运算

位运算技巧

1. 判断奇偶性:

        直接判断二进制的第0位是否为1或者0

        相当于直接判断x&1,结果是1就是奇数,结果是0就是偶数

2. 求出x二进制的第i位:

        获取第0位:直接&1

        先将第i位转成第0位 : 右移i位        (x>>i)&1

3. 将二进制的第i位设置为1:

        对(1 << i)进行或运算:x | (1 << i)

4. 将二进制的第i位设置为0:

        对~(1<<i)进行与运算:x & ( ~ (1 << i))

5.  判断是否为2的若干次方:

        判断x&(x-1)是否等于0

        因此2的若干次方二进制表示中只存在一个1,上述一定成立,并且上述成立时说明只有一个1

6. 获取x的最低位的 1:

        Lowbit(x)= x&(-x)

例题

二进制中1的个数

区间或

思路:

假如列表为【1,3,2,4,5】
那么他们的二进制是001,011,010,100,101
合起来第0位【1,1,0,0,1】第1位【0,1,1,0,0】第2位【0,0,0,1,1】
那么假如你要想判断区间2~5,即3,2,4,5
则第0位【1,0,0,1】进行或运算,第1位是【1,1,0,0】,第2位是【0,0,1,1】,得出来就是111,即7
那么我们在这里用一种快一点的判断方法(前缀和),或运算是有1得1,那么我们是是不是只有识别这个区间和大于0即可说明该区间有1
我们把原来的(第三行)换算成前缀和:第0位【1,2,2,2,3】第1位【0,1,2,2,2】第2位【0,0,0,1,2】
然后我们要判断区间2~5,是不是只要判断前缀和第0位的第5个数减去第1个数(前缀和公式),即3-1=2,说明有两个1,那么就可以判断第0位是1(这里需要了解前缀和)
那么我们就可以做一个循环,观察数据,发现二进制最多位数应该是31,那么我们就从0判断到30
假设第i位,我们就观察第i位的区间是不是大于0,大于0则为1,然后用(1<<i)表示第i位为1,且转成十进制
最后累加得出结果

Read more

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

摘要:本文聚焦OpenClaw从测试环境走向生产环境的核心痛点,围绕“性能优化、安全加固、监控运维”三大维度展开实操讲解。先明确生产环境硬件/系统选型标准,再通过硬件层资源管控、模型调度策略、缓存优化等手段提升响应速度(实测响应效率提升50%+);接着从网络、权限、数据三层构建安全防护体系,集成火山引擎安全方案拦截高危操作;最后落地TenacitOS可视化监控与Prometheus告警体系,配套完整故障排查清单和虚拟实战案例。全文所有配置、代码均经实测验证,兼顾新手入门实操性和进阶读者的生产级部署需求,帮助开发者真正实现OpenClaw从“能用”到“放心用”的跨越。 优质专栏欢迎订阅! 【DeepSeek深度应用】【Python高阶开发:AI自动化与数据工程实战】【YOLOv11工业级实战】 【机器视觉:C# + HALCON】【大模型微调实战:平民级微调技术全解】 【人工智能之深度学习】【AI 赋能:Python 人工智能应用实战】【数字孪生与仿真技术实战指南】 【AI工程化落地与YOLOv8/v9实战】【C#工业上位机高级应用:高并发通信+性能优化】 【Java生产级避坑指南:

By Ne0inhk
ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

🎬 渡水无言:个人主页渡水无言 ❄专栏传送门: 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》 ❄专栏传送门: 《freertos专栏》《STM32 HAL库专栏》 ⭐️流水不争先,争的是滔滔不绝  📚博主简介:第二十届中国研究生电子设计竞赛全国二等奖 |国家奖学金 | 省级三好学生 | 省级优秀毕业生获得者 | ZEEKLOG新星杯TOP18 | 半导纵横专栏博主 | 211在读研究生 在这里主要分享自己学习的linux嵌入式领域知识;有分享错误或者不足的地方欢迎大佬指导,也欢迎各位大佬互相三连 目录 前言  一、实验基础说明 1.1、互斥体简介 1.2 本次实验设计思路 二、硬件原理分析(看过之前博客的可以忽略) 三、实验程序编写 3.1 互斥体 LED 驱动代码(mutex.c) 3.2.1、设备结构体定义(28-39

By Ne0inhk
Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 后端工程师扔给你一个 Swagger (OpenAPI) 文档地址,你会怎么做? 1. 对着文档,手写 Dart Model 类(容易写错字段类型)。 2. 手写 Retrofit/Dio 的 API 接口定义(容易拼错 URL)。 3. 当后端修改了字段名,你对着报错修半天。 这是重复劳动的地狱。 swagger_dart_code_generator 可以将 Swagger (JSON/YAML) 文件直接转换为高质量的 Dart 代码,包括: * Model 类:支持 json_serializable,带 fromJson/

By Ne0inhk
Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

文章目录 * 前言 * make/makefile * 文件的三个时间 * Linux第一个小程序-进度条 * 回车和换行 * 缓冲区 * 程序的代码展示 * git指令 * 关于gitee * Linux调试器-gdb使用 * 作业部分 前言 做 Linux 开发时,你是不是也遇到过这些 “卡脖子” 时刻?写 makefile 时,明明语法没错却报错,最后发现是依赖方法行没加 Tab;想提交代码到 gitee,记不清 git add/commit/push 的 “三板斧”,还得反复搜教程;用 gdb 调试程序,输了命令没反应,才想起编译时没加-g生成 debug 版本;甚至连写个进度条,都搞不懂\r和\n的区别,导致进度条乱跳…… 其实这些问题,

By Ne0inhk