当前位置: 首页 > news >正文

算法基础学习笔记——④前缀和\差分\双指针\位运算

博主:命运之光
专栏:算法基础学习

目录

✨前缀和

✨一维前缀和

🍓一维前缀和模板:

✨二维前缀和

🍓二位前缀和模板:


前言:算法学习笔记记录日常分享,需要的看哈O(∩_∩)O,感谢大家的支持!


前缀和

一维前缀和

原i:a[1] a[2] a[3] …a[n]

前缀和:s[i]=a[1]+a[2]+…+a[i] s[0]=0(方便处理边界问题)

注:下标一定从1开始

1.如何求s[i]:

for(i=1;i<=n;j++)s[i]=s[i-1]+a[i]

2.作用:(快)O(1)

快速求出原数组里一段数的和

🍓一维前缀和模板:

S[i] = a[1] + a[2] + ... a[i]a[l] + ... + a[r] = S[r] -S[l -1]

二维前缀和

🍓二位前缀和模板:

S[i, j] = 第i行j列格子左上部分所有元素的和。

以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和为:

S[x2, y2] -S[x1 -1, y2] -S[x2, y1 -1] + S[x1 -1, y1 -1]

 ✨差分

差分实际是前缀和的逆运算

一维差分

🍓一维差分模板:

给区间[l, r]中的每个数加上c:B[l] += c, B[r + 1] -= c

二维差分

🍓二维差分模板:

给以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵中的所有元素加上c:

S[x1, y1] += c, S[x2 + 1, y1] -= c, S[x1, y2 + 1] -= c, S[x2 + 1, y2 + 1] += c

 ✨双指针

双指针算法的核心思想:

for(int i=0;i<n;i++)

for(int j=0;j<n;j++)

        O(n^2)

将上面的朴素算法优化到O(n)

🍓双指针模板:

for (int i = 0, j = 0; i < n; i ++ )
{while (j < i && check(i, j)) j ++ ;// 具体问题的逻辑
}

常见问题分类:

(1) 对于一个序列,用两个指针维护一段区间

(2) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作

🍓例题:统计日志

#include <iostream>
#include <algorithm>
using namespace std;
const int N=100000+5;
typedef struct Log{
int ts,id;
}Log; 
Log logs[N];
//(tk-D,tk]
int n,d,k; 
int cnt[N];//cnt[i]始终存储的是连续d分钟内id=i的帖子的点赞量 
bool rt[N]; 
bool cmp(Log qian,Log hou){if(qian.ts<hou.ts)return true;return false;
}
int main(){scanf("%d%d%d",&n,&d,&k);int m=0;for(int i=1;i<=n;i++){scanf("%d%d",&logs[i].ts,&logs[i].id);m=max(m,logs[i].id);}sort(logs+1,logs+n+1,cmp); for(int i=1,j=1;i<=n;i++){//i和j始终维护长度小于d的区间 cnt[logs[i].id]++; while(logs[i].ts-logs[j].ts>=d){cnt[logs[j].id]--;j++;}if(cnt[logs[i].id]>=k){rt[logs[i].id]=true;}}for(int i=0;i<=m;i++){if(rt[i]==true)printf("%d\n",i);}
}

🍓例题:统计子矩阵

#include <iostream>
using namespace std;
const int N=510;
int n,m,k; 
int s[N][N];
int main(){cin>>n>>m>>k;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>s[i][j];s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+s[i][j];}}long long ans=0;for(int l=1;l<=m;l++){for(int r=l;r<=m;r++){for(int d=1,u=1;d<=n;d++){while(u<=d&&(s[d][r]-s[d][l-1]-s[u-1][r]+s[u-1][l-1]>k))u++;if(u<=d)ans+=d-u+1;}}}cout<<ans<<endl;
}

位运算

操作一

n的二进制中第k位是几

1.先把第k位移到最后一位n>>k

2.看个位是几x&1

🍓十进制转化成二进制、八进制、十六进制(连除法)

🍓二进制、八进制、十六进制转化成十进制

🍓关于原码,反码,补码:

原码、反码补码是计算机中用来表示带符号整数的三种编码方式。

1. 原码(Sign-Magnitude):

原码是最简单的表示方法,将一个整数按照正负号和数值进行编码。具体规则如下:

  • 正数的原码是其二进制表示形式。
  • 负数的原码是将对应的正数的原码最高位改为1。

🍓例如,假设用8位二进制表示整数,数字+3的原码是00000011,数字-3的原码是10000011。

2. 反码(One's Complement):

反码是在原码的基础上,将负数的表示方式进行改进。具体规则如下:

  • 正数的反码与其原码相同。
  • 负数的反码是将对应的正数的原码按位取反,即将0变为1,将1变为0。

🍓例如,数字+3的反码是00000011,数字-3的反码是11111100。

3. 补码(Two's Complement):

补码是在反码的基础上进行改进,是计算机中最常用的表示方式。具体规则如下:

  • 正数的补码与其原码相同。
  • 负数的补码是将对应的正数的原码按位取反,然后再加1。

🍓例如,数字+3的补码是00000011,数字-3的补码是11111101。

补码的使用在计算机中具有以下好处:

  • 可以统一处理正数和负数的加减运算,无需单独处理符号位。
  • 补码只有一个表示零的编码,避免了正零和负零的问题。
  • 补码的表示范围比原码和反码更广,能够表示的最大正整数比较大。

🍓🍓需要注意的是,在使用补码表示的计算机系统中,最高位通常被用作符号位,即0表示正数,1表示负数。这种表示方式使得补码能够直接进行加减运算,并且可以方便地检测结果的正负。

 

相关文章:

算法基础学习笔记——④前缀和\差分\双指针\位运算

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法基础学习 目录 ✨前缀和 ✨一维前缀和 &#x1f353;一维前缀和模板&#xff1a; ✨二维前缀和 &#x1f353;二位前缀和模板&#xff1a; 前言&#xff1a;算法学习笔记记录日常分享&#xff0c;需要的看哈O(∩_∩)O&a…...

【Linux系统基础快速入门详解】Linux下安装软件必知必会4种方法(yum,编译安装,rpm包,二进制方式)等详解

在 Linux 下安装软件有多种方法可供选择,常用的包括 yum、编译安装、rpm 包和二进制方式。下面对这些方法进行详细说明: 使用 yum 安装软件yum 是 Red Hat 系列 Linux 发行版中常用的软件包管理工具,通过 yum 可以方便地安装、升级和删除软件包。yum 默认从官方仓库中下载软…...

ASEMI代理长电可控硅BT136参数,BT136规格,BT136说明

编辑-Z 长电可控硅BT136参数&#xff1a; 型号&#xff1a;BT136 RMS通态电流IT(RMS)&#xff1a;6A 非重复浪涌峰值导通电流ITSM&#xff1a;25A 峰值栅极电流IGM&#xff1a;2A 平均栅极功耗PG(AV)&#xff1a;0.5W 存储接点温度范围Tstg&#xff1a;-40 to 150℃ 工…...

代码线程安全

线程生命周期 synchronized synchronized会自动释放锁 synchronized同步代码块 synchronized后面括号里obj是锁对象(保证唯一)&#xff1b;static修饰的obj对象是自定义MyThread线程类的静态成员变量&#xff0c;该自定义线程类所有实例共享保证锁对象唯一性&#xff1b;另一…...

Filebeat技术栈总结

filebeat 是一个轻量型日志采集器&#xff0c;本质上是一个 agent 。不依赖于任何应用&#xff0c;可以安装在任何节点上&#xff0c;可单独使用 Filebeat 并根据配置读取对应位置的日志进行上报和搜集。 filebeat 内置了常用的 output 组件&#xff0c;例如 kafka、ElasticSe…...

【App自动化测试】(十六)健壮性测试工具——Android Monkey

目录 1. 介绍2. 安装3. Monkey的使用4. money常用命令5. 常用事件类型参数6. Monkey使用参考 1. 介绍 Monkey是一个在模拟器或设备上运行的程序&#xff0c;用于生成用户事件的伪随机流。 为什么要使用Monkey这个自动化遍历工具&#xff1f; Monkey解决了一个测试痛点&#xff…...

实现第一个内核程序的Hello World

背景 在内核的开发中&#xff0c;总要先入个门。那么就要来编写第一个内核程序 入门 一个 module_init 程序是Linux内核模块的一部分&#xff0c;通过module_init 方法就能将程序载入内核。 module_init 方法需要以下步骤 编写module_init 的代码&#xff0c;并将其保存为…...

python基于协同过滤推荐算法的电影观后感推荐管理系统的设计

本课题所设计的影单管理系统&#xff0c;使用B/S架构&#xff0c;Python语言进行开发&#xff0c;它的优点代码不能从浏览器查看&#xff0c;保密性非常好&#xff0c;比其他的影单管理更具安全性。Python还容易修改和调试&#xff0c;毕竟影视是在不断发展过程中&#xff0c;难…...

Vue——状态管理库Pinia

写在前面&#xff1a;本文参考小满大牛的pinia专栏 一、Vuex与Pinia Vuex 和 Pinia 均是 Vue.js 的状态管理库&#xff0c;它们为 Vue 应用程序提供了一种集中式的、可预测的状态管理解决方案。 Vuex 是 Vue.js 官方推荐的状态管理库之一。它的核心概念包括 state、mutation…...

Linux:忘记root密码解决办法

如果你是虚拟机只要将光盘镜像连接到虚拟机上&#xff0c;以光盘iso镜像启动 如果你是真机或服务器那将实体u盘或实体光盘连接至设备并且以连接的设备启动 开机时候打断开机 使用 &#xff08;u盘|光盘&#xff09;引导启动 troubleshooting rescue a centos system 输入 1…...

Dockerfile(4) - RUN 指令详解

RUN 运行命令 shell 形式 命令在 shell 中运行Linux 上默认为 /bin/sh -cWindows 上 cmd /S /C RUN <command> exec 形式 RUN ["executable", "param1", "param2"] 必须双引号&#xff0c;不能是单引号 两种写法的实际栗子 RUN …...

一个完整的APP定制开发流程是怎样的?

随着移动互联网的发展&#xff0c;越来越多的 APP应用软件进入人们的生活&#xff0c;让我们的生活更便捷、更舒适。而随着互联网技术的进步&#xff0c;移动互联网应用软件开发行业也越来越成熟&#xff0c;为了适应市场需求&#xff0c;各种功能强大、性能良好的 APP应用软件…...

【数据结构】24王道考研笔记——线性表

线性表 目录 线性表定义和基本操作顺序表静态顺序表动态顺序表 链表单链表不带头结点&#xff1a;带头结点&#xff1a; 双链表循环链表循环单链表&#xff1a;循环双链表&#xff1a; 静态链表 顺序表链表比较逻辑结构&#xff1a;存储结构&#xff1a;基本操作&#xff1a; 定…...

【Linux C】基于树莓派/香橙派的蓝牙服务端——支持多蓝牙设备接入

一、需求 在树莓派/香橙派上利用开发板自带的蓝牙作为一个蓝牙服务端&#xff08;主机&#xff09;&#xff0c;允许外来设备&#xff08;从机&#xff09;通过蓝牙接入进行通信&#xff0c;通信格式为透传方式&#xff1b;采用的编程语言为Linux C 二、环境准备 bluez安装 …...

鸿蒙App开发选择Java还是JavaScript?

众所周知&#xff0c; Java和 JavaScript是两种编程语言&#xff0c;这两种语言在不同的环境中都有许多用途。在鸿蒙 App开发中&#xff0c; Java和 JavaScript是两种常见的编程语言&#xff0c;它们都具有广泛的应用&#xff0c;并且都有其独特的优势。下面我们将就这两种编程…...

【Android】CountDownTimer的使用

android中怎么实现倒计时 在Android中&#xff0c;可以使用CountDownTimer类来实现倒计时。以下是一个简单的示例&#xff1a; javaCopy new CountDownTimer(30000, 1000) {public void onTick(long millisUntilFinished) {// 每次倒计时间隔1秒&#xff0c;更新UI上的倒计时剩…...

Linux :: 【基础指令篇 :: 文件及目录操作:(1)】:: ls :: 查看指定目录下的内容

前言&#xff1a;本篇是 Linux 基本操作篇章的内容&#xff01; 笔者使用的环境是基于腾讯云服务器&#xff1a;CentOS 7.6 64bit。 学习集&#xff1a; C 入门到入土&#xff01;&#xff01;&#xff01;学习合集Linux 从命令到网络再到内核&#xff01;学习合集 目录索引&am…...

【商品详情 +关键词搜索】API 接口系列

首先&#xff0c;大家要到官方主页去申请一个 appkey&#xff0c;这个是做什么用的呢&#xff1f;App Key 是应用的唯一标识&#xff0c;TOP 通过 App Key 来鉴别应用的身份。AppSecret 是 TOP 给应用分配的密钥&#xff0c;开发者需要妥善保存这个密钥&#xff0c;这个密钥用来…...

RabbitMQ学习-发布确认高级

发布确认springboot版本 确认机制方案&#xff1a; 代码架构图&#xff1a; 配置文件&#xff1a; 在application.properties全局配置文件中添加spring.rabbitmq.publish-confirm-type属性&#xff0c;这个属性有以下几种值 none:禁用发布确认模式(默认)0 correlated:发布消…...

重载和内联函数

函数的默认参数 默认参数是指调用函数的时候&#xff0c;如果不写实参&#xff0c;那么将使用一个缺省值。 使用默认参数可以使你的函数更加灵活&#xff0c;同时减少了在不同上下文中为相同的参数重复编写相同的代码的需要。 return_type function_name(data_type paramete…...

2026年京东云OpenClaw/Hermes Agent配置Token Plan安装保姆级分享

2026年京东云OpenClaw/Hermes Agent配置Token Plan安装保姆级分享、OpenClaw是开源的个人AI助手&#xff0c;Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具…...

终极游戏库管理器Playnite:一站式管理20+平台游戏的最佳解决方案

终极游戏库管理器Playnite&#xff1a;一站式管理20平台游戏的最佳解决方案 【免费下载链接】Playnite Video game library manager with support for wide range of 3rd party libraries and game emulation support, providing one unified interface for your games. 项目…...

观察Taotoken在不同时段与地域的API响应延迟表现

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察Taotoken在不同时段与地域的API响应延迟表现 对于依赖大模型API进行开发的团队而言&#xff0c;服务的响应延迟是影响开发效率…...

SAS宏编程中IN运算符的三种实现方法与实战应用

1. 项目概述&#xff1a;从“硬编码”到“智能匹配”的宏编程跃迁在SAS宏编程的世界里&#xff0c;我们常常会遇到一个经典困境&#xff1a;如何优雅地处理一组离散的、但逻辑上同属一个类别的值&#xff1f;比如&#xff0c;你需要根据用户传入的省份名称&#xff0c;执行不同…...

Windows应用层Hook原理与合规实践指南

我不能按照您的要求生成关于“逆向微信4.0撤回机制&#xff1a;从符号恢复到DLL劫持实战”的博文内容。原因如下&#xff1a;违反平台安全与合规底线&#xff1a;该标题明确指向对微信客户端的逆向分析、符号恢复及DLL劫持等行为。微信作为受法律保护的商用即时通讯软件&#x…...

初创团队如何利用Taotoken统一管理多项目的AI模型调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初创团队如何利用Taotoken统一管理多项目的AI模型调用 对于初创团队而言&#xff0c;同时推进多个小项目是常态。每个项目可能都需…...

2026 高炉炼铁智能化技术全景与演进路径~系列文章03:高炉工业数据治理标准化与全生命周期血缘体系

第4期&#xff1a;高炉工业数据治理标准化与全生命周期血缘体系 导言&#xff1a;数据治理不是"清洗数据"那么简单。本期我们将站在工程实践的角度&#xff0c;系统阐述高炉数据从采集到应用的全生命周期管理方法论&#xff0c;重点解决"数据质量如何评价"…...

为内部ai工具平台选择统一api网关时taotoken的接入与管理价值

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为内部AI工具平台选择统一API网关时Taotoken的接入与管理价值 当公司内部需要构建一个集成多种AI能力的工具平台时&#xff0c;技术…...

零基础30天掌握渗透测试实战路径

1. 别被“渗透测试”四个字吓住&#xff1a;它本质是“合法授权的系统体检”很多人第一次看到“渗透测试”这个词&#xff0c;脑子里立刻浮现出黑客电影里飞速滚动的代码、黑底绿字的终端、戴着兜帽在咖啡馆敲键盘的神秘人——这种刻板印象害了不少想入门的朋友。我带过三十多个…...

PPT怎么转PDF?一键快捷操作与全方位转换方法测评

在日常工作中&#xff0c;我们经常需要将PowerPoint演示文稿转换成PDF格式。无论是为了保证演示文件的兼容性、方便分享给他人&#xff0c;还是用于打印和存档&#xff0c;PPT转PDF都是一项必不可少的技能。本文将为你深入讲解PPT转PDF的多种方法&#xff0c;包括快捷键操作、软…...