[leetcode]双指针算法的使用

零.参考文章

双指针技术在数组和链表问题中的应用解析-CSDN博客

一.使用情况

双指针即是在有序数组的情况下,我们通过两个指针在遍历的过程中进行标记,对满足条件的进行处理,直至遍历完整个数组。

二.举个例子

2.1小人过河问题:

一个孤岛上有7个人重量54kg,55kg,56kg,57kg,58kg,59kg,70kg。她们需要逃生到安全的地方。现在有足够的救生艇,但是每个救生艇只能坐两个人,而且每个救生艇最大能承受113kg的重量,那她们最少需要多少救生艇才能全部逃生。

#include <iostream>
#include <list>
#include <iterator> // for std::prev, std::next
#include <algorithm> // for std::sort

using namespace std;

int main()
{
    list<int> l{ 54, 70, 56, 59, 57, 58, 55 };
    l.sort(); // 对列表进行排序
    int limitWeight = 113;
    auto itB = l.begin();
    auto itE = prev(l.end()); // 指向最后一个元素
    int num = 0;

    while (itB != itE)
    {
        // 特别处理剩余两个元素的情况
        if (next(itB) == itE)
        {
            int sum = *itB + *itE;
            if (sum > limitWeight)
            {
                num += 2; // 如果两个元素加起来超过限制,则需要两艘船
            }
            else
            {
                num++; // 否则只需要一艘船
            }
            break; // 处理完后退出循环
        }

        int sum = *itB + *itE;
        if (sum > limitWeight) // 大于限制重量,让itE单独坐船
        {
            num++;
            --itE;
        }
        else // 小于或等于限制重量,两人一起坐船
        {
            num++;
            ++itB;
            --itE;
        }
    }

    // 如果还剩下一个元素(即itB == itE),则需要再加一艘船
    if (itB == itE)
    {
        num++;
    }

    cout << "num = " << num << endl;
    return 0;
}

2.2两数之和等于target


#include <iostream>
#include <list>
#include <iterator> // for std::prev

using namespace std;

int main()
{
    int target = 9;
    list<int> l{ 2, 3, 4, 6, 8 };
    l.sort(); // 确保列表是排序的,因为双指针法要求输入是有序的
    auto itB = l.begin(); // 迭代器指向列表的第一个元素
    auto itE = prev(l.end()); // 迭代器指向列表的最后一个元素
    list<int> returnlist{};

    while (itB != itE)
    {
        int sum = *itB + *itE;
        if (sum > target) // 大于去大
        {
            --itE;
        }
        else if (sum < target) // 小于去小
        {
            ++itB;
        }
        else // 找到了
        {
            returnlist.push_back(*itB);
            returnlist.push_back(*itE);
            break;
        }
    }

    if (!returnlist.empty())
    {
        cout << "Found numbers: [";
        bool first = true;
        for (int num : returnlist)
        {
            if (!first) cout << ", ";
            cout << num;
            first = false;
        }
        cout << "]" << endl;
    }
    else
    {
        cout << "No pair found that adds up to " << target << "." << endl;
    }

    return 0;
}

输出结果

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

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

相关文章

自指学习:AGI的元认知突破

文章目录 引言:从模式识别到认知革命一、自指学习的理论框架1.1 自指系统的数学定义1.2 认知架构的三重反射1.3 与传统元学习的本质区别二、元认知突破的技术路径2.1 自指神经网络架构2.2 认知效能评价体系2.3 知识表示的革命三、实现突破的关键挑战3.1 认知闭环的稳定性3.2 计…

C++ 入门速通-第5章【黑马】

内容来源于&#xff1a;黑马 集成开发环境&#xff1a;CLion 先前学习完了C第1章的内容&#xff1a; C 入门速通-第1章【黑马】-CSDN博客 C 入门速通-第2章【黑马】-CSDN博客 C 入门速通-第3章【黑马】-CSDN博客 C 入门速通-第4章【黑马】-CSDN博客 下面继续学习第5章&…

hot100(7)

61.31. 下一个排列 - 力扣&#xff08;LeetCode&#xff09; 数组问题&#xff0c;下一个更大的排列 题解&#xff1a;31. 下一个排列题解 - 力扣&#xff08;LeetCode&#xff09; &#xff08;1&#xff09;从后向前找到一个相邻的升序对&#xff08;i,j)&#xff0c;此时…

图像分类与目标检测算法

在计算机视觉领域&#xff0c;图像分类与目标检测是两项至关重要的技术。它们通过对图像进行深入解析和理解&#xff0c;为各种应用场景提供了强大的支持。本文将详细介绍这两项技术的算法原理、技术进展以及当前的落地应用。 一、图像分类算法 图像分类是指将输入的图像划分为…

记录一次-Rancher通过UI-Create Custom- RKE2的BUG

一、下游集群 当你的下游集群使用Mysql外部数据库时&#xff0c;会报错&#xff1a; **他会检查ETCD。 但因为用的是Mysql外部数据库&#xff0c;这个就太奇怪了&#xff0c;而且这个检测不过&#xff0c;集群是咩办法被管理的。 二、如果不选择etcd,就选择控制面。 在rke2-…

SpringUI Web高端动态交互元件库

Axure Web高端动态交互元件库是一个专为Web设计与开发领域设计的高质量资源集合&#xff0c;旨在加速原型设计和开发流程。以下是关于这个元件库的详细介绍&#xff1a; 一、概述 Axure Web高端动态交互元件库是一个集成了多种预制、高质量交互组件的工具集合。这些组件经过精…

MySQL表的CURD

目录 一、Create 1.1单行数据全列插入 1.2多行数据指定列插入 1.3插入否则更新 1.4替换 2.Retrieve 2.1 select列 2.1.1全列查询 2.1.2指定列查询 2.1.3查询字段为表达式 2.1.4为查询结果指定别名 2.1.5结果去重 2.2where条件 2.3结果排序 2.4筛选分页结果 三…

文字加持:让 OpenCV 轻松在图像中插上文字

前言 在很多图像处理任务中,我们不仅需要提取图像信息,还希望在图像上加上一些文字,或是标注,或是动态展示。正如在一幅画上添加一个标语,或者在一个视频上加上动态字幕,cv2.putText 就是这个“文字魔术师”,它能让我们的图像从“沉默寡言”变得生动有趣。 今天,我们…

(9)gdb 笔记(2):查看断点 info b,删除断点 delete 3,回溯 bt,

&#xff08;11&#xff09; 查看断点 info b&#xff1a; # info b举例&#xff1a; &#xff08;12&#xff09;删除断点 delete 2 或者删除所有断点&#xff1a; # 1. 删除指定的断点 delete 3 # 2. 删除所有断点 delete 回车&#xff0c;之后输入 y 确认删除所有断点 举…

游戏引擎学习第88天

仓库:https://gitee.com/mrxiao_com/2d_game_2 调查碰撞检测器中的可能错误 在今天的目标是解决一个可能存在的碰撞检测器中的错误。之前有人提到在检测器中可能有一个拼写错误&#xff0c;具体来说是在测试某个变量时&#xff0c;由于引入了一个新的变量而没有正确地使用它&…

【2025】camunda API接口介绍以及REST接口使用(3)

前言 在前面的两篇文章我们介绍了Camunda的web端和camunda-modeler的使用。这篇文章主要介绍camunda结合springboot进行使用&#xff0c;以及相关api介绍。 该专栏主要为介绍camunda的学习和使用 &#x1f345;【2024】Camunda常用功能基本详细介绍和使用-下&#xff08;1&…

Java高频面试之SE-17

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本牛马baby今天又来了&#xff01;哈哈哈哈哈嗝&#x1f436; Java缓冲区溢出&#xff0c;如何解决&#xff1f; 在 Java 中&#xff0c;缓冲区溢出 (Buffer Overflow) 虽然不是像 C/C 中那样直接可见…

用 Python 绘制爱心形状的简单教程

1. 引言 在本教程中&#xff0c;我们将学习如何使用 Python 和 Matplotlib 库来绘制一个简单的爱心形状。这是一个有趣且简单的项目&#xff0c;适合初学者练习图形绘制和数据可视化。 2. 环境准备 首先&#xff0c;确保您的系统上安装了 Python 和 Matplotlib 库。如果还未…

107,【7】buuctf web [CISCN2019 华北赛区 Day2 Web1]Hack World

这次先不进入靶场 看到红框里面的话就想先看看uuid是啥 定义与概念 UUID 是 Universally Unique Identifier 的缩写&#xff0c;即通用唯一识别码。它是一种由数字和字母组成的 128 位标识符&#xff0c;在理论上可以保证在全球范围内的唯一性。UUID 的设计目的是让分布式系…

Linux之安装MySQL

1、查看系统当前版本是多少位的 getconf LONG_BIT2.去官网下载对应的MYSQL安装包 这里下载的是8版本的&#xff0c;位数对应之前的64位 官网地址&#xff1a;https://downloads.mysql.com/archives/community/ 3.上传压缩包 4.到对应目录下解压 tar -xvf mysql-8.0.26-lin…

【NLP 20、Encoding编码 和 Embedding嵌入】

目录 一、核心定义与区别 二、常见Encoding编码 (1) 独热编码&#xff08;One-Hot Encoding&#xff09; (2) 位置编码&#xff08;Positional Encoding&#xff09; (3) 标签编码&#xff08;Label Encoding&#xff09; (4) 注意事项 三、常见Embedding词嵌入 (1) 基础词嵌入…

【ArcGIS Pro 简介1】

ArcGIS Pro 是由 Esri &#xff08;Environmental Systems Research Institute&#xff09;公司开发的下一代桌面地理信息系统&#xff08;GIS&#xff09;软件&#xff0c;是传统 ArcMap 的现代化替代产品。它结合了强大的空间分析能力、直观的用户界面和先进的三维可视化技术…

初学 Xvisor 之理解并跑通 Demo

官网&#xff1a;https://www.xhypervisor.org/ quick-start 文档&#xff1a;https://github.com/xvisor/xvisor/blob/master/docs/riscv/riscv64-qemu.txt 零、Xvisor 介绍 下面这部分是 Xvisor 官方的介绍 Xvisor 是一款开源的 Type-1 虚拟机管理程序&#xff0c;旨在提供一…

“AI智能分析综合管理系统:企业管理的智慧中枢

在如今这个快节奏的商业世界里&#xff0c;企业面临的挑战越来越多&#xff0c;数据像潮水一样涌来&#xff0c;管理工作变得愈发复杂。为了应对这些难题&#xff0c;AI智能分析综合管理系统闪亮登场&#xff0c;它就像是企业的智慧中枢&#xff0c;让管理变得轻松又高效。 过去…

LabVIEW涡轮诊断系统

一、项目背景与行业痛点 涡轮机械是发电厂、航空发动机、石油化工等领域的核心动力设备&#xff0c;其运行状态直接关系到生产安全与经济效益。据统计&#xff0c;涡轮故障导致的非计划停机可造成每小时数十万元的经济损失&#xff0c;且突发故障可能引发严重安全事故。传统人…