尺取算法

2023-11-02

尺取法

尺取法可以用来优化for循环降低程序的时间复杂度

例题:第一行是一个整数n,表示数组元素的个数。第二行有n个空格分隔的整数。第三行有一个整数sum。输出一个整数,表示有多少对元素之和等于sum。

输入格式:
6
1 3 5 7 9 31
10

输出:
2

尺取的思想:对于一个递增的序列,定义两个指针i,j遍历数组选取两数求和,i从左往右遍历,j从右往左遍历,会出现三种情况。sum以10为例

① a[ i ] + a[ j ] == sum
在这里插入图片描述
此时直接记录下此情况,然后执行i++和j- -操作来寻找下一种两数之和等于10可能的情况(i++会使a[ i ]变大,j- -会使a[ j ]变小,整体和不变)。

② a[ i ] + a[ j ] > sum
在这里插入图片描述
a[ i ] + a[ j ] > 10的原因是第二个数过大,此时若想使两数之和等于10,需要对 j 指针进行 j- -操作。操作完成之后a[ j ] = 9,如此遍历数组,寻找两数和为10的情况。

③ a[ i ] + a[ j ] < sum

在这里插入图片描述
a[ i ] + a[ j ] < 10的原因是a[ i ]过小,此时可执行 i++使a[ i ]变大,即a[ i ] = 3 从而使 a[ i ] + a[ j ] = 10。

综上:若
① a[ i ] + a[ j ] == sum (i++ j- -)
② a[ i ] + a[ j ] > sum (j- -)
③ a[ i ] + a[ j ] < sum (i++)

#include <cstdio>
#include <iostream>

using namespace std;

int a[10010];

int main()
{
    int n;
    cin >> n;
    for (int i = 1;i <= n;i++) cin >> a[i];
    int sum;
    cin >> sum;
    
    //定义双指针
    int i = 1,j = n;
    int ans = 0;
    
    //核心代码
    while (i < j)
    {
        if (a[i] + a[j] == sum)
        {
            ans += 1;
            i++;
            j--;
        }
        else if (a[i] + a[j] > sum) j--;
        else if (a[i] + a[j] < sum) i++;
    }
    cout << ans << endl;
    return 0;
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尺取算法 的相关文章

  • ionic cordova 之File插件实现文件下载

    1 项目中引入File插件 File插件使用参见https ionicframework com docs native file 2 File下载文件实现代码示例 import Injectable from angular core i
  • 宫本武藏重做技能介绍 宫本武藏重做有哪些加强

    要说王者荣耀中哪个英雄能被称为超级兵 那肯定都会想到宫本武藏 而在最近 重做后的宫本武藏正式上线了 下面就一起来看看宫本武藏重做技能介绍吧 宫本武藏重做技能介绍 被动技能 二天一流 释放技能获得一重 势 每次普攻消耗一重 势 最高两重 根据

随机推荐

  • 我是华为人

    我是华为人 又见到老皮 Puerschel 已过了五年 这次他是带客户到中国来参观 依旧是神采奕奕 笑容满面 来去匆匆 他是德国人 大学一毕业就进入中国华为工作 一干就是五年 而且始终保持着高昂的斗志 愉快的心情 华为是什么吸引了他 让他能
  • cat /proc/meminfo的解读

    MediaTek On Line Loginhttps online mediatek com QuickStart QS00227 QSS02376 anon pages 匿名页 没有文件背景的页面 如stack heap 数据段等 他们
  • Redis下载安装与配置(windows)

    一 Redis下载 Redis官网建议使用Linux进行部署 未提供windows版本的Redis 但微软开发和维护着Windows64版本的Redis Windows64版本的Redis下载地址 Releases microsoftarc
  • 熟悉Kali源-无法定位软件包问题

    文章目录 Linux安装特性 问题和解决 结论和应对 参考 Linux安装特性 每个LINUX的发行版 比如ubuntu 都会维护一个自己的软件仓库 我们常用的几乎所有软件都在这里面 这里面的软件绝对安全 而且绝对的能正常安装 在ubunt
  • 增广拉格朗日函数的KKT条件及投影形式(projection form)

    我的这篇博文中介绍了增广拉格朗日函数及KKT条件 增广拉格朗日函数 The augmented Lagrangian 及其KKT条件 这篇文章中介绍了Lagrangian的KKT条件和投影形式 KKT条件和投影定理 Projection T
  • glTF2.0_01

    glTF2 0
  • Jenkins---Jenkins配置定时任务

    前言 当我们将自动化代码成功的部署到了Jenkins 领导突然有要求 想要每2小时进行看下自动化的结果 这个时候jenkins能帮助我们实现吗 答案是肯定的 jenkins上有构建定时器 接下来安静通过小小的例子如何操作 Jenkins定时
  • 学习笔记(STM32通用定时器)

    PS 自己做的笔记 质量不高T T 源教程视频 https www bilibili com video BV1th411z7sn vd source e9a6e1a7cd4e8068209a469f8be0be16 STM32F103C8
  • C++开源库集合

    C 开源库集合 Main Site Index Download mimetic A free GPL C MIME Library mimetic is a free GPL Email library MIME written in C
  • 刷脸支付市场生态朝着更加良性方向发展

    购物付款时 不用开机 只是看一眼支付设备 就能完成付款 今年以来 刷脸支付在大小商店 餐馆逐渐铺开 消费者和商家在感到新鲜 好奇的同时也发现 这一设备利用率高 体验比二维支付好 刷脸支付未来市场还在观察 移动支付和支付没有办法确定使用者到底
  • Springboot配置页面国际化

    有时候网站会涉及中英文甚至多语言的切换 这时候我们需要学习国际化 准备工作 先设置properties的编码为utf 8 编写国际化配置文件 在resources资源路径下新建i18n目录 存放国际化配置文件 3 建立一个login pro
  • jenkins从gitlab拉取代码

    1 生成秘钥 首先要在容器内创建SSH秘钥和公钥 进入jenkins命令行状态然后输入ssh keygen后会成产密钥对 存放在 root ssh 目录下 id rsa为私钥 id ras pub为公钥 可以用cat命令查看生成的公钥和私钥
  • leetcode刷题题解——173. 二叉搜索树迭代器

    迭代思路 private TreeNode node private Stack
  • 2021-05-31-element中table表hover显示隐藏表单的实现

    element中table表hover显示隐藏表单的实现 需求 实现鼠标悬停table中的某一列显示修改按钮 修改按钮跟随内容后间距8px 内容超过16字节显示 加上修改按钮 效果如下图 需求 实现鼠标悬停table中的某一列显示修改按钮
  • 叶俊:从佛说法制的十大好处谈到企业的制度与人情

    Hello 大家好 欢迎来到火锅智烩 我是叶俊 随着大众创业 万众创新的观念深入人心 越来越多的人加入到创业的大潮当中去 于是商业竞争就显得更加激烈了 在这个创业的过程当中 很多的新手乃至于老手都难免遇到这样那样的种种的困惑跟问题 其中当企
  • 兼容性测试对于软件测试来说重要吗?

    该测试是软件测试的一个重要部分 它也获得了越来越多的关注和重视 那么 兼容性测试对于软件测试来说重要吗 我们一起往下了解 首先 兼容性测试可以确保软件在不同的操作系统 硬件平台和设备上能够正常运行 在产品开发过程中 由于各种因素的影响 经常
  • Android 实现APP内应用更新功能(支持Android7.0以上)

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 前言 实现APP内应用更新功能思路 这里我给大家具体说明以下 思路 通过API接口获取服务器端版本号 与本地应用版本号作比较 如果本地版
  • 直流充电国标报文缩写定义

    直流充电国标报文缩写定义 报文简称 报文全称 描述 CRM Charger Recognition Message 充电机辨识报文 BRM Battery Recognition Message BMS和车辆辨识报文 BCP Battery
  • IKE协商

    1 IKEv1协商的两个阶段 第一阶段 通信双方协商和建立IKE协议本身使用的安全通道 目的是建立一个IKE SA 交互的内容 交互密钥资源 交互双方的公钥 交互IKE SA 用来加密主模式里面的5和6两个包 身份验证 第二阶段 利用第一阶
  • 尺取算法

    尺取法 尺取法可以用来优化for循环 降低程序的时间复杂度 例题 第一行是一个整数n 表示数组元素的个数 第二行有n个空格分隔的整数 第三行有一个整数sum 输出一个整数 表示有多少对元素之和等于sum 输入格式 6 1 3 5 7 9 3