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

C++ 算法学习——7.4.1 优化算法——双指针

双指针法(Two Pointers)是一种常用的算法技巧,通常用于解决数组或链表中的问题。这种技巧通过维护两个指针,通常分别指向数组或链表的不同位置,来协同解决问题。双指针法一般有两种类型:快慢指针和左右指针。

快慢指针(Slow-Fast Pointers)

  • 概念:快慢指针是指两个指针,一个快指针和一个慢指针,它们以不同的速度移动来解决问题。慢指针一般每次移动一个位置,而快指针一般每次移动两个或多个位置。

  • 应用场景:常用于判断链表是否有环(快慢指针在环形链表中一定会相遇)、链表中点、链表倒数第K个节点等问题。

左右指针(Two Pointers)

  • 概念:左右指针是指两个指针,一个指向开始位置(左指针),一个指向结束位置(右指针),它们向中间移动解决问题。

  • 应用场景:常用于有序数组或链表中的查找、求和、两数之和等问题。左右指针可以根据问题的特点进行不同的移动策略,比如向内移动、向外移动或向中间移动。

双指针算法的优势

  • 时间复杂度:双指针算法通常时间复杂度较低,因为每个指针只遍历一次数组或链表。

  • 空间复杂度:双指针算法通常不需要额外的空间,只需要常数级的额外空间。

  • 可解决问题:双指针算法可以解决许多数组和链表相关的问题,包括查找、求和、判断等。

示例

  • 快慢指针:判断链表是否有环。

  • 左右指针:在有序数组中找到两个数使它们的和等于目标值。


P1. 洛谷p1102A-B数对

分析:双指针优化算法常常是让找东西更方便,而查找有序区间是最优的,最坏也是o(n)级别的时间复杂度。而原数组排序后,所要找的A存在的区间B存在的区间宏观大小上就相差一个C。而查找这样的区间,使用双指针必然可以得到优化。

#include<iostream>
#include<algorithm>
using namespace std;int main()
{int n,c;cin>>n>>c;int* nums=new int[n];for(int i=0;i<n;i++){cin>>nums[i];}long long result=0;sort(nums,nums+n);int left=0;int right=0;//for(int i=0;i<n;i++) cout<<nums[i]<<" ";for(int dexa=0;dexa<n;dexa++){while(right<n&&nums[right]-nums[dexa]<=c) right++;while(left<n&&nums[left]-nums[dexa]<c) left++;if(nums[dexa]-nums[left]==-c&&nums[dexa]-nums[right-1]==-c&&right-1>=0)result+=(right-left);}cout<<result;return 0;
}

相关文章:

C++ 算法学习——7.4.1 优化算法——双指针

双指针法&#xff08;Two Pointers&#xff09;是一种常用的算法技巧&#xff0c;通常用于解决数组或链表中的问题。这种技巧通过维护两个指针&#xff0c;通常分别指向数组或链表的不同位置&#xff0c;来协同解决问题。双指针法一般有两种类型&#xff1a;快慢指针和左右指针…...

镁光DDR3的命名

64M16的解释如图。 125是指一个时钟周期需要1.25ns走完&#xff0c;1us对应 1MHZ, 1ns对应1000MHZ ,那么1.25ns对应的时钟频率&#xff0c;就先用 1/1.25得到 1.25us对应的时钟频率 0.8 &#xff0c;然后再乘以1000&#xff0c;得到800就是MHZ 带宽的计算就是 800M…...

[Git] Git下载及使用 从入门到精通 详解(附下载链接)

前言 目录 Git概述 简介 下载 Git代码托管服务 Git常用命令 Git全局配置 获取Git仓库 在本地初始化一个Git仓库 从远程仓库克隆 基本概念 工作区文件状态 本地仓库操作 远程仓库操作 分支操作 标签操作 在IDEA中使用Git 在IDEA中配置Git 本地仓库操作 远程仓…...

Linux源码阅读笔记-USB驱动分析

基础层次详解 通用串行总线&#xff08;USB&#xff09;主要用于连接主机和外部设备&#xff08;协调主机和设备之间的通讯&#xff09;&#xff0c;USB 设备不能主动向主机发送数据。USB 总线采用拓扑&#xff08;树形&#xff09;&#xff0c;主机侧和设备侧的 USB 控制器&a…...

【超级详细解释】力扣每日一题 134.加油站 48. 旋转图像

134.加油站 力扣 这是一个很好的问题。这个思路其实基于一种贪心策略。我们从整个路径的油量变化来理解它&#xff0c;结合一个直观的“最低点法则”&#xff0c;来确保找到正确的起点。 问题的核心&#xff1a;油量差值的累积 对于每个加油站&#xff0c;我们有两个数组&…...

数据挖掘基本架构知识点

数据挖掘的基本架构主要包含以下几个部分&#xff1a; 一、数据获取 1. 数据源 - 可以是数据库&#xff08;如关系型数据库MySQL、Oracle等&#xff09;、文件系统&#xff08;如CSV文件、XML文件等&#xff09;、网络数据&#xff08;如网页内容、社交媒体数据&#xff09;等…...

LangChain中使用Prompt01

1.引入提示模板 from langchain.prompts import (SystemMessagePromptTemplate,AIMessagePromptTemplate,HumanMessagePromptTemplate, )2.设置系统提示 system_template_text"你是一位专业的翻译&#xff0c;能够将{input_language}翻译成{output_language}&#xff0c…...

如何使用bpmn-js实现可视化流程管理

介绍 BPMN-JS是一个流行的开源库&#xff0c;用于在Web应用程序中可视化、创建、编辑和分析BPMN&#xff08;Business Process Model and Notation&#xff0c;业务流程建模与表示法&#xff09;2.0 图。BPMN是一种国际标准的图形化语言&#xff0c;用于描述企业中的业务流程&a…...

【PostgreSQL 】实战篇——如何使用 EXPLAIN 和 ANALYZE 工具分析查询计划和性能,优化查询

在数据库管理中&#xff0c;优化查询性能是确保应用程序高效运行的关键因素之一。 随着数据量的不断增长和复杂查询的增多&#xff0c;理解查询的执行计划变得尤为重要。 PostgreSQL 提供了强大的工具 EXPLAIN 和 ANALYZE&#xff0c;帮助开发者分析查询计划和性能&#xff0…...

List、Map、Set 三个接口存取元素时,各有什么特点

List、Map、Set是Java集合框架中的三个核心接口&#xff0c;它们在存取元素时各自具有独特的特点。以下是对这三个接口存取元素特点的详细分析&#xff1a; List接口 有序性&#xff1a; List中的元素是有序的&#xff0c;它们按照插入的顺序进行排列。 可重复性&#xff1a…...

掌握 ASP.NET Web 开发:从基础到身份验证

ASP.NET 是微软开发的一个功能强大的框架&#xff0c;广泛用于构建现代化的 Web 应用程序。它支持 MVC 架构、Web API、Razor 语法&#xff0c;并提供完善的身份验证与授权机制。本文将介绍 ASP.NET 的基础知识、MVC 模式、Web API 开发、Razor 语法&#xff0c;以及如何实现身…...

【C++图文并茂】01背包问题不会?超详细的详解,看完保证你会

大家好&#xff0c;今天 给大家讲解01背包问题 有N件物品和一个容量为V的背包。第i件物品的体积是c[i]&#xff0c;价值是w[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 01背包问题是典型的动态规划问题&#xff0c;我们拿葡萄矿泉水和西…...

SQL自学:什么是子查询,如何使用它们

在 SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;的世界里&#xff0c;子查询是一种强大的工具&#xff0c;它允许我们在一个 SQL 查询内部嵌套另一个查询。子查询也被称为内部查询或嵌套查询&#xff0c;为我们提供了一种灵活且强大的方式…...

No.10 笔记 | PHP学习指南:PHP数组掌握

本指南为PHP开发者提供了一个全面而简洁的数组学习路径。从数组的基本概念到高级操作技巧&#xff0c;我们深入浅出地解析了PHP数组的方方面面。无论您是初学者还是寻求提升的中级开发者&#xff0c;这份指南都能帮助您更好地理解和运用PHP数组&#xff0c;提高编码效率和代码质…...

RS-232 串口通信和 RS-485 串口通信的区别

RS-232 串口通信和 RS-485 串口通信有以下区别&#xff1a; 1. 通信方式&#xff1a; RS-232&#xff1a;全双工通信方式&#xff0c;即数据的发送和接收可以同时进行。在全双工模式下&#xff0c;通信双方可以在同一时刻既发送数据又接收数据&#xff0c;就像两个人可以同时…...

【K8s】专题十四(1):Kubernetes 安全机制之 RBAC

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正! 如果对您有帮助,烦请点赞、关注、转发、订阅专栏! 专栏订阅入口 | 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 | 往期精彩文章 【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决…...

8. 多态、匿名内部类、权限修饰符、Object类

文章目录 一、多态 -- 花木兰替父从军1. 情境2. 小结 二、匿名内部类三、权限修饰符四、Object -- 所有类的父类(包括我们自己定义的类)五、内容出处 一、多态 – 花木兰替父从军 1. 情境 我们现在新建两个类HuaMuLan和HuaHu。HuMuLan是HuaHu的女儿&#xff0c;所以她会有她父…...

CentOS/Ubuntu/Debian安装LibeventCentOS安装Libevent库(含示例代码)库(含示例代码)

使用命令&#xff1a;CentOS安装Libevent库&#xff08;含示例代码&#xff09; sudo yum install libevent-devel Ubuntu/Debian: sudo apt install libevent-dev 示例代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <unistd.h> …...

【大数据】数据采集工具sqoop介绍

文章目录 什么是sqoop?一、Sqoop的起源与发展二、Sqoop的主要功能三、Sqoop的工作原理四、Sqoop的使用场景五、Sqoop的优势六、Sqoop的安装与配置 sqoop命令行一、Sqoop简介与架构二、Sqoop特点三、Sqoop常用命令及参数四、使用示例五、注意事项 什么是sqoop? Sqoop是一款开…...

vite学习教程02、vite+vue2配置环境变量

文章目录 前言1、安装依赖2、配置环境变量3、应用环境变量4、运行和构建项目资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&#xff1…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...