蓝桥杯最后十天冲刺 day 2 双指针的思想

双指针思想介绍

双指针(Two Pointers)是一种在数组或链表等线性结构中常用的算法技巧,通过使用两个指针(索引或引用)以不同的速度或方向遍历数据结构,从而高效解决问题。双指针通常用于优化暴力解法,将时间复杂度从 O(n²) 降低到 O(n) 或 O(n log n)。

常见应用场景:
  1. 快慢指针:用于链表中的环检测、找中点等(如快指针每次走两步,慢指针走一步)。
  2. 左右指针:用于有序数组的两数之和、反转数组等(如一个指针从左向右,另一个从右向左)。
  3. 滑动窗口:通过调整两个指针的间隔解决子数组/子串问题(如最小覆盖子串)。

蓝桥杯中的双指针题目示例

以下是蓝桥杯竞赛中可能用到双指针思想的题目及其解法思路:

1. ​两数之和(有序数组)​
  • 题目描述:给定一个升序排列的数组和一个目标值,找到数组中两个数的和等于目标值,返回它们的索引。
  • 双指针解法
    • 初始化左指针 left = 0,右指针 right = len(nums) - 1
    • 比较 nums[left] + nums[right] 与目标值:
      • 若和等于目标值,返回结果;
      • 若和小于目标值,left++(需要更大的数);
      • 若和大于目标值,right--(需要更小的数)。
  • 时间复杂度:O(n)。
def twoSum(nums, target):left, right = 0, len(nums) - 1while left < right:s = nums[left] + nums[right]if s == target:return [left, right]elif s < target:left += 1else:right -= 1return []
2. ​三数之和(去重)​
  • 题目描述:找到数组中所有不重复的三元组,满足 a + b + c = 0
  • 双指针解法
    • 先排序数组,固定一个数 nums[i],然后用双指针在 i+1 到末尾寻找两数之和等于 -nums[i]
    • 需跳过重复值以避免重复解。
  • 时间复杂度:O(n²)。
 

python

复制

def threeSum(nums):nums.sort()res = []for i in range(len(nums) - 2):if i > 0 and nums[i] == nums[i - 1]:continue  # 去重left, right = i + 1, len(nums) - 1while left < right:s = nums[i] + nums[left] + nums[right]if s < 0:left += 1elif s > 0:right -= 1else:res.append([nums[i], nums[left], nums[right]])while left < right and nums[left] == nums[left + 1]:left += 1  # 去重while left < right and nums[right] == nums[right - 1]:right -= 1  # 去重left += 1right -= 1return res
3. ​盛最多水的容器(贪心+双指针)​
  • 题目描述:给定一个数组表示容器的高度,找到两条线使得它们与 x 轴构成的容器能装最多的水。
  • 双指针解法
    • 初始化 left = 0right = len(height) - 1max_area = 0
    • 每次移动较短的边(因为移动长边不可能增加面积)。
  • 时间复杂度:O(n)。
 

python

复制

def maxArea(height):left, right = 0, len(height) - 1max_area = 0while left < right:area = (right - left) * min(height[left], height[right])max_area = max(max_area, area)if height[left] < height[right]:left += 1else:right -= 1return max_area
4. ​蓝桥杯真题示例:日志统计(滑动窗口)​
  • 题目链接:蓝桥杯 2018 省赛
  • 问题描述:给定 N 条日志的点赞时间,统计在任意长度为 D 的时间段内点赞不少于 K 次的帖子。
  • 双指针解法
    • 按时间排序后,用滑动窗口(双指针)统计窗口内的点赞数,若满足条件则标记帖子。
  • 代码片段
     

    python

    复制

    logs = [...]  # 日志数据格式: [(时间, 帖子id), ...]
    logs.sort()
    count = {}  # 记录当前窗口内各id的点赞数
    res = set()
    left = 0
    for right in range(len(logs)):id = logs[right][1]count[id] = count.get(id, 0) + 1while logs[right][0] - logs[left][0] >= D:count[logs[left][1]] -= 1left += 1if count[id] >= K:res.add(id)

总结

双指针的核心是通过协同移动两个指针减少不必要的计算,常用于:

  • 有序数组的搜索(如两数之和)。
  • 滑动窗口问题(如子串、区间统计)。
  • 链表操作(如快慢指针)。

在蓝桥杯竞赛中,双指针常与排序、贪心等结合,需注意边界条件和去重处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Axure 使用笔记

1.Axure如何制作页面弹窗 https://blog.csdn.net/SDTechnology/article/details/143948691 2.axure 怎么点击按钮打开新页面 &#xff08;1&#xff09;新建交互 &#xff08;2&#xff09;单击是触发 &#xff08;3&#xff09;选择打开链接 &#xff08;4&#xff09;选择…

STM32实现一个简单电灯

新建工程的步骤 建立工程文件夹&#xff0c;Keil中新建工程&#xff0c;选择型号工程文件夹里建立Start、Library、User等文件夹&#xff0c;复制固件库里面的文件到工程文件夹工程里对应建立Start、Library、User等同名称的分组&#xff0c;然后将文件夹内的文件添加到工程分组…

html5炫酷图片悬停效果实现详解

html5炫酷图片悬停效果实现详解 这里写目录标题 html5炫酷图片悬停效果实现详解项目介绍技术栈核心功能实现1. 页面布局2. 图片容器样式3. 炫酷悬停效果缩放效果倾斜效果模糊效果旋转效果 4. 悬停文字效果5. 性能优化6. 响应式设计 项目亮点总结 项目介绍 本文将详细介绍如何使…

Playwright与Browser Use:领略AI赋能UI自动化测试的魔法魅力

目录 Browser Use是什么&#xff1f; Playwright简介 框架设计的核心目标与原则 Playwright 在 UI 自动化测试中的优势 如何高效拦截错误 实现视频录制 UI自动化框架设计的挑战 测试框架的结构与模块化设计 自动化测试不是银弹 走进Browser Use 横空出世的背景与意义…

Uniapp 实现微信小程序滑动面板功能详解

文章目录 前言一、功能概述二、实现思路三、代码实现总结 前言 Uniapp 实现微信小程序滑动面板功能详解 一、功能概述 滑动面板是移动端常见的交互组件&#xff0c;通常用于在页面底部展开内容面板。本文将介绍如何使用 Uniapp 开发一个支持手势滑动的底部面板组件&#xff0…

【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(12)

1.问题描述&#xff1a; pushdeviceid的长度是固定的吗&#xff1f; 解决方案&#xff1a; 在鸿蒙系统中&#xff0c;设备ID的长度是固定的。 2.问题描述&#xff1a; 通过REST API三方推送IM类消息&#xff0c;如何实现应用处于前台时不展示三方推送通知。 解决方案&…

【小兔鲜】day02 Pinia、项目起步、Layout

【小兔鲜】day02 Pinia、项目起步、Layout 1. Pinia2. 添加Pinia到Vue项目3. 案例&#xff1a;Pinia-counter基础使用3.1 Store 是什么&#xff1f;3.2 应该在什么时候使用 Store? 4. Pinia-getters和异步action4.1 getters4.2 action如何实现异步 1. Pinia Pinia 是 Vue 的专…

Android学习之计算器app(java + 详细注释 + 源码)

运行结果&#xff1a; 基础的四则运算&#xff1a; 可能会出现的问题以及解决方法&#xff1a; 问题1&#xff1a;出现多个操作符。 例子&#xff1a;12 解决方法&#xff1a; 在用户点击操作符之后&#xff0c;去检查之前的最后一位&#xff0c;如果最后一位也是操作符的话…

GMap.NET + WPF:构建高性能 ADS-B 航空器追踪平台

ADS-B 简介 ADS - B&#xff08;Automatic Dependent Surveillance - Broadcast&#xff0c;广播式自动相关监视&#xff09;是一种先进的航空监视技术。它依靠飞机上的机载设备&#xff0c;自动收集诸如飞机的位置、高度、速度、航向等关键数据&#xff0c;并周期性地以广播的…

关于testng.xml无法找到类的问题

问题&#xff1a;testng.xml添加测试类的时候飘红 解决办法&#xff1a; 1.试图通过自动生成testng.xml插件去解决&#xff0c;感觉也不是这个问题&#xff0c;没有尝试&#xff1b; 2.以为是创建包的方式不对&#xff0c;重新删除后新建--还是找不到 想新建类的时候发现从m…

数据在内存中存储(C语言)

文章目录 前言一、整数在内存中的存储1.1 计算机存储数据的基本单位示例代码 1.2 无符号整数的存储1.3 有符号整数的存储&#xff08;补码&#xff09;示例代码 二、大小端字节序和字节序判断2.1 什么是大小端&#xff1f;示例代码 2.2 为什么会有大小端&#xff1f;2.3 字节序…

Python爬虫第2节-网页基础和爬虫基本原理

目录 一、网页基础 1.1 网页的组成 1.2 网页的结构 1.3 节点树及节点间的关系 1.4 选择器 二、爬虫的基本原理 2.1 爬虫概述 2.2 能抓怎样的数据 2.3 JavaScript 渲染页面 一、网页基础 使用浏览器访问网站时&#xff0c;我们会看到各式各样的页面。你是否思考过&…

python-leetcode 64.在排序数组中查找元素的第一个和最后一个位置

题目&#xff1a; 给一个按照非递减顺序排列的整数数组nums,和一个目标值target,请找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值target,返回[-1,-1] 方法一&#xff1a;二分查找 直观的思路肯定是从前往后遍历一遍。用两个变量记录第一次和最后一次…

分享一些新版GPT-4o使用方式!能多模态生图!

目前GPT-4o的整体测评&#xff0c;真的很惊艳。 不知道又有多少人因为OpenAI的这次更新而失业&#xff0c;当然只要AI用得好&#xff0c;会有更多人因之而受益&#xff01;很多人表示不知道怎么用&#xff0c;对于门外汉来说&#xff0c;4o似乎有点高端。 今天就给大家介绍几…

软件工程面试题(二十四)

1、连接池的原理 j2ee 服务器启动时会建立一定数量的池连接,并一直维持不少于此数量的池连接。当客户端程序需要连接时,吃驱动程序会返回一个未使用的池连接并将其标记为忙。如果当前 没有空闲连接,池驱动就建立一定新的 连接 2、用javascript编写脚本小程序,实现点击全选…

Android:Dialog的使用详解

Android中Dialog的使用详解 Dialog&#xff08;对话框&#xff09;是Android中常用的UI组件&#xff0c;用于临时显示重要信息或获取用户输入。 1. 基本Dialog类型 1.1 AlertDialog&#xff08;警告对话框&#xff09; 最常用的对话框类型&#xff0c;可以设置标题、消息、…

arinc818 fpga单色图像传输ip

arinc818协议支持的常用线速率如下图 随着图像分辨率的提高&#xff0c;单lane的速率无法满足特定需求&#xff0c;一种方式是通过多个LANE交叉的去传输图像&#xff0c;另外一种是通过降低图像的带宽&#xff0c;即通过只传单色图像达到对应的效果 程序架构如下图所示&#x…

透视投影(Perspective projection)与等距圆柱投影(Equirectangular projection)

一、透视投影 1.方法概述 Perspective projection&#xff08;透视投影&#xff09;是一种模拟人眼观察三维空间物体时的视觉效果的投影方法。它通过模拟观察者从一个特定视点观察三维场景的方式来创建二维图像。在透视投影中&#xff0c;远处的物体看起来比近处的物体小&…

三.微服务架构中的精妙设计:服务注册/服务发现-Eureka

一.使用注册中心背景 1.1服务远程调用问题 服务之间远程调⽤时, 我们的URL是写死的 String url "http://127.0.0.1:9090/product/" orderInfo.getProductId(); 缺点&#xff1a; 当更换机器, 或者新增机器时, 这个URL就需要跟着变更, 就需要去通知所有的相关服…

FPGA实现4K MIPI视频解码H265压缩网络推流输出,基于IMX317+VCU架构,支持4K60帧,提供工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 MIPI 编解码方案我这里已有的视频图像编解码方案 3、详细设计方案设计框图FPGA开发板IMX317摄像头MIPI D-PHYMIPI CSI-2 RX Subsystem图像预处理Sensor …