优选算法第一讲:双指针模块

news2025/1/11 0:01:23

优选算法第一讲:双指针模块

  • 1.移动零
  • 2.复写零
  • 3.快乐数
  • 4.盛最多水的容器
  • 5.有效三角形的个数
  • 6.查找总价格为目标值的两个商品
  • 7.三数之和
  • 8.四数之和

1.移动零

链接: 移动零
下面是一个画图,其中,绿色部分标出的是重点:
在这里插入图片描述
代码实现:

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        //定义双指针
        for(int cur = 0, des = -1; cur < nums.size(); cur++)
        {
            //当cur指向的位置不为0时,才进行交换
            if(nums[cur])
            {
                swap(nums[cur], nums[++des]);//注意:先++des,再进行交换
            }
        }
    }
};

2.复写零

链接: 复写零
在这里插入图片描述
代码实现:

class Solution {
public:
    void duplicateZeros(vector<int>& arr) {
        //先找到src的位置
        int src = 0, des = -1, n = arr.size();
        while(src < n)
        {
            if(arr[src]) des++;
            else des+=2;
            if(des >= n-1) break;
            src++;
        }
        if(des == n)
        {
            //发生了越界时,修正des的位置
            arr[n-1] = 0;
            src--;
            des -= 2;
        }
        //从后向前复写
        while(des > 0)
        {
            if(arr[src])
                arr[des--] = arr[src--];
            else
            {
                arr[des--] = 0;
                arr[des--] = 0;
                src--;
            }
        }
    }
};

3.快乐数

链接: 快乐数
在这里插入图片描述

class Solution {
public:
    //按照题意求值
    int Value(int n)
    {
        //循环*10 %10,C语言中讲过
        int sum = 0;
        while(n)
        {
            int t = n % 10;
            sum += t*t;
            n = n /10;
        }
        return sum;
    }

    bool isHappy(int n) {
        int slow = n, fast = Value(n);
        while(slow != fast)
        {
            slow = Value(slow);
            fast = Value(Value(fast));
        }

        return slow == 1;
    }
};

4.盛最多水的容器

链接: 盛最多水的容器
在这里插入图片描述
代码实现:

class Solution {
public:
    int maxArea(vector<int>& height) {
        int left = 0, right = height.size()-1, ret = 0;
        while(left < right)
        {
            int H = min(height[left], height[right]);
            ret = max(ret, (right-left)*H);
            if(height[left] > height[right]) right--;
            else left++;
        }
        return ret;
    }
};

5.有效三角形的个数

链接: 有效三角形的个数
在这里插入图片描述

class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        //1.先对数组进行排序
        sort(nums.begin(), nums.end());
        int sum = 0;
        for(int i = nums.size()-1; i>=2; i--)
        {
            //i为最大值的下标
            //使用双指针进行运算
            int left = 0, right = i-1;
            while(left < right)
            {
                if(nums[left] + nums[right] > nums[i])
                {
                    sum += right-left;
                    right--;
                }
                else left++;
            }
        }
        return sum;
    }
};

6.查找总价格为目标值的两个商品

链接: 查找总价格为目标值的两个商品
在这里插入图片描述

class Solution {
public:
    vector<int> twoSum(vector<int>& price, int target) {
        //因为题目说明已经是升序了,所以我们不用再进行排序了
        //使用双指针算法
        int left = 0, right = price.size()-1;
        while(left < right)
        {
            if(price[left] + price[right] > target) right--;
            else if(price[left] + price[right] < target) left++;
            else return {price[left], price[right]};
        }
        return {0, 0};
    }
};

7.三数之和

在这里插入图片描述

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> ret;
        //1.先对数组进行排序
        sort(nums.begin(), nums.end());
        //对i的固定
        int i = 0;
        while(i <= nums.size()-3)
        {
            //双指针算法
            int left = i+1, right = nums.size()-1;
            while(left < right)
            {
                if(nums[left] + nums[right] > -nums[i]) right--;
                else if(nums[left] + nums[right] < -nums[i]) left++;
                else
                {
                    //当相等时,先插入数据
                    ret.push_back(vector<int>({nums[left], nums[right], nums[i]}));
                    //再处理去重问题
                    left++;
                    right--;
                    while(left < right && nums[left] == nums[left-1]) left++;
                    while(left < right && nums[right] == nums[right+1]) right--;
                }
            }
            //对i进行去重
            i++;
            while(i <= nums.size()-3 && nums[i] == nums[i-1]) i++;
        }
        return ret;
    }
};

8.四数之和

链接: 四数之和
在这里插入图片描述

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

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

相关文章

技术速递|VS Code Java 9月更新 - 大量 Spring 更新!Gradle 功能优化

作者&#xff1a;Nick Zhu 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎来到 Visual Studio Code for Java 的九月更新&#xff01;在本篇博客中&#xff0c;我们将介绍一些重要的 Spring 功能更新和 Gradle 增强功能&#xff0c;让我们开始吧&#xff01; Spring 更新 …

深入理解Java并发读写锁——ReentrantReadWriteLock

ReentrantReadWriteLock使用场景 ReentrantReadWriteLock 是 Java 的一种读写锁&#xff0c;它允许多个读线程同时访问&#xff0c;但只允许一个写线程访问&#xff08;会阻塞所有的读写线程&#xff09;。这种锁的设计可以提高性能&#xff0c;特别是在读操作的数量远远超过写…

CDGA|数据治理对企业来说到底有什么用?真的值得做吗?

在当今数字化时代&#xff0c;数据已成为企业运营和决策的核心资源。随着企业规模的扩大和业务复杂性的增加&#xff0c;如何有效管理和利用数据成为了企业面临的重大挑战。数据治理作为一套系统性的方法&#xff0c;旨在确保数据的质量、安全性、合规性和有效性&#xff0c;对…

24软考信息系统监理师考前冲刺20问!你能答上来多少?

距离下半年软考考试还剩不到一个月&#xff01;在此提醒各位考生不要只知道盲目啃书&#xff01;由于今年的软考知识点繁杂&#xff0c;很难抓住重心&#xff01; 这里给大家准备了信息系统监理师考前冲刺20问&#xff0c;帮助各位更好的理解重要考点~供考生备考使用&#xff0…

ROS-melodic moveit

1.安装ROS-melodic 搜索“鱼香ROS”&#xff0c;一键安装&#xff0c;十分方便&#xff0c;感谢大佬做出的贡献。 https://fishros.com/ 2.安装moveit sudo apt-get install ros-melodic-moveit source /opt/ros/melodic/setup.bash3.下载源码 这里用的是胡春旭老师的源码&…

AI网关在应用集成中起到什么作用?

现在&#xff0c;国内外几乎每个SaaS服务商都找到办法把大型语言模型&#xff08;LLM&#xff09;集成到自己的产品里。印证了那句话“每款SaaS都值得用AI重做一遍”我们暂且不讨论是否值得用AI重做&#xff0c;但是增加AI的功能&#xff0c;确实能让产品有更多的卖点。 通过整…

9.校园二手网站系统( Springboot 和 thymeleaf(html)开源框架)

目录 1.系统的受众说明 2.系统需求分析 2.2.1用户功能模块 2.2.2二手交易功能需求 2.2.3需求发布功能需求 2.3.1操作流程 2.3.2添加信息流程 2.3.3删除信息流程 2.4 系统E-R图 3.系统概要设计 3.1系统的整体架构 3.2 数据库表 4.系统实现 4.1用户功能模块 4.2 二…

智慧链动青春:国家区块链中心接待北京市十一学校青少年访学探索

以生动科学的方法点燃青少年科学探索欲望是构建未来科技人才梯队的基石。近期国家区块链技术创新中心接待北京市十一学校新生访学&#xff0c;以科普讲座、实操互动的方式让学生在深度思考中感受科学魅力、接触前沿科技&#xff0c;激发学生对区块链、隐私计算和芯片设计制造的…

解决ImageIO无法读取部分JPEG格式图片问题

解决ImageIO无法读取部分JPEG格式图片问题 问题描述 我最近对在线聊天功能进行了一些内存优化&#xff0c;结果在回归测试时&#xff0c;突然发现有张图片总是发送失败。测试同事把问题转到我这儿来看&#xff0c;我仔细检查了一下&#xff0c;发现是上传文件的接口报错&#…

如何解决JMeter响应数据乱码?

问题&#xff1a; 解决&#xff1a; 1、找到JMeter安装目录下的bin目录 2、 在bin目录下&#xff0c;打开" jmeter.properties "文件 3、搜索"sampleresult.default.encoding" 4、改成"sampleresult.default.encodingUTF-8"&#xff0c;去掉前面…

3D数学在unity中的使用(工作小结)

前言&#xff1a; 公司的游戏&#xff0c;想实现一个类似于元气骑士前传的技能面板&#xff0c;这里的技能可以实现旋转替换。 记录一下我遇到的问题及解决办法。 如何生成这些图标 1&#xff1a;手动摆放。 优点&#xff1a;实现起来简单&#xff0c;代码量少。 缺点&…

南平自闭症寄宿制学校在哪里?探索最佳教育选择

在寻找适合自闭症儿童的教育环境时&#xff0c;家长们往往面临诸多挑战。尤其是在南平这样的地区&#xff0c;专业的自闭症寄宿制学校资源相对有限。然而&#xff0c;随着特殊教育领域的不断发展&#xff0c;一些优秀的寄宿制学校已经在全国范围内崭露头角&#xff0c;其中&…

2024年河南省职业技能竞赛(网络建设与运维赛项)

模块二&#xff1a;网络建设与调试 说明&#xff1a; 1.所网络设备在创建之后都可以直接通过 SecureCRT 软件 telnet 远程连接操作。 2.要求在全员化竞赛平台中保留竞赛生成的所有虚拟主机。 3.题目中所有所有的密码均为 Pass-1234&#xff0c;若未按照要求设置&#xff0c;涉 …

OBOO鸥柏丨 21.5 寸自助服务终端机智能科技查询一体新势力

OBOO鸥柏数字化 21.5 寸自助服务终端机以其卓越的表现、丰富的功能和可靠的品质&#xff0c;主要应用于政务办事大厅&#xff0c;自助查档&#xff0c;自助打印&#xff0c;自助办理业务一体机触摸终端&#xff0c;智慧城市营业厅均在当前市场中已经展现出强大的优势。科技触控…

想要加密电脑文件?2024年企业常用的10款电脑加密软件排行榜

在2024年&#xff0c;随着网络安全威胁日益增多&#xff0c;企业对数据安全的需求越来越强烈。电脑文件加密已成为保护敏感信息免受未经授权访问的必备手段。企业为了确保数据安全&#xff0c;往往会选择专业的加密软件&#xff0c;帮助保护文件、文件夹、硬盘、甚至整个系统。…

安科瑞ARB5弧光保护在船舶中压配电板中的应用-安科瑞黄安南

摘要&#xff1a;船舶中压配电板弧光故障导致的设备损坏和停电事故&#xff0c;不仅会造成较大的经济损失&#xff0c;而且严重影响船舶电站的安全稳定运行&#xff0c;威胁船舶电站操作人员的安全。弧光保护是基于电力系统开关柜发生弧光故障时而设计的一套母线保护系统&#…

C++编程语言:抽象机制:构造,清理,复制和移动(Bjarne Stroustrup)

(译注&#xff1a;本章细节非常多&#xff0c;纷繁复杂&#xff0c;一些语法特点体现了似乎在禁止一个问题&#xff0c;但是又在背后开了一个后门&#xff0c;在实践中极其容易出错&#xff0c;需要特别注意每一个细节。) 第17章 构造、清理、复制、和移 (Construction,Clea…

惠普HP35670A, Agilent35670a FFT动态信号分析仪

Keysight 35670A&#xff08;安捷伦&#xff09;FFT 动态信号分析仪是一款多功能 FFT 分析仪&#xff0c;具有内置信号源&#xff0c;可用于一般频谱和网络分析以及倍频程、阶次和相关性分析。内置源具有可选的分析功能&#xff0c;可优化仪器以分析和排除噪声、振动和声学问题…

跟踪一切学习笔记2024

目录 Track-Anything 多目标跟踪分割 masa 多目标检测跟踪: omnimotion iKUN Track-Anything 交互式,选择多个要跟踪的物体,最后是分割 多目标跟踪分割 https://github.com/gaomingqi/Track-Anything masa 多目标检测跟踪:

区块链积分系统:支付领域的新篇章与未来引领

在数字化浪潮汹涌的今天&#xff0c;支付安全及风险管理议题愈发凸显其重要性。交易量的飞速增长让传统支付体系面临效率、合规性和安全性的严峻挑战&#xff0c;亟需新的解决方案。 区块链技术&#xff0c;凭借其独特的去中心化结构、高透明度以及数据不可更改的特性&#xf…