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

【基础算法】双指针---数组元素的目标和

🌹作者:云小逸
📝个人主页:云小逸的主页
📝Github:云小逸的Github
🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前,其次就是现在!学会自己和解,与过去和解,努力爱自己。==希望春天来之前,我们一起面朝大海,春暖花开!==🤟
👏专栏:C++👏 👏专栏:Java语言👏👏专栏:Linux学习👏
👏专栏:C语言初阶👏👏专栏:数据结构👏👏专栏:备战蓝桥杯👏

文章目录

  • 前言
  • 数组元素的目标和
    • 题目:
    • 输入格式
    • 输出格式
    • 数据范围
    • 输入样例:
    • 输出样例:
    • 做题思路:
    • 代码:
  • 最后


前言

今天我们继续学习双指针问题:【数组元素的目标和】,码字不易,请多多支持!
——————————————————————————————

首先先写上几句话:献给坚持创作的我和点开这篇文章希望进步的你
1. 我们很少信任比我们好的人,宁肯避免与他们来往。相反,我们常对与我们相似、和我们有着共同弱点的人吐露心迹。我们并不希望改掉弱点,只希望受到怜悯与鼓励。
——阿尔贝·加缪《局外人》

2.人的内心,既求生,也求死。我们既追逐光明,也追逐黑暗。我们既渴望爱,有时候却又近乎自毁地浪掷手中的爱。——弗洛伊德

3.我们必须习惯,站在人生的交叉路口,却没有红绿灯的事实。——海明威

数组元素的目标和

题目:

给定两个升序排序的有序数组 A 和 B,以及一个目标值 x。
数组下标从 0 开始。请你求出满足 A[i]+B[j]=x 的数对 (i,j)。
数据保证有唯一解。

输入格式

第一行包含三个整数 n,m,x,分别表示 A 的长度,B 的长度以及目标值 x。

第二行包含 n 个整数,表示数组 A。

第三行包含 m 个整数,表示数组 B。

输出格式

共一行,包含两个整数 i 和 j。

数据范围

数组长度不超过 105。
同一数组内元素各不相同。
1≤数组元素≤109

输入样例:

4 5 6
1 2 4 7
3 4 6 8 9

输出样例:

1 1

做题思路:

双指针问题:

  1. 它读入三个整数 n,m 和 x,然后读入两个长度分别为 n 和 m 的数组 a 和 b。接下来,代码使用双指针算法在两个数组中寻找两个数,使得它们的和等于 x。如果找到了这样的一对数,程序会输出它们在各自数组中的下标。

  2. 具体来说,在主函数中,首先使用 scanf() 函数读入输入数据。然后使用一个循环遍历数组 a 中的每一个元素。对于每一个元素 a[i],程序会检查是否存在一个元素 b[j] 使得它们的和等于 x。如果存在这样的一对数,程序会输出它们在各自数组中的下标。

  3. 这段代码使用了双指针算法来优化搜索过程。具体来说,在遍历数组 a 的同时,程序维护了一个指向数组 b 的指针 j。当遍历到新的元素时,如果当前的两个数之和大于目标值,则将指针向左移动以减小总和;否则检查当前两个数之和是否等于目标值。

代码:

#include <iostream>using namespace std;const int N = 1e5 + 10; // 定义常量 N,用于设置数组的最大长度int n, m, x; // 定义三个整数变量 n,m 和 x
int a[N], b[N]; // 定义两个长度为 N 的整型数组 a 和 bint main()
{scanf("%d%d%d", &n, &m, &x);for (int i = 0; i < n; i ++ ) scanf("%d", &a[i]); for (int i = 0; i < m; i ++ ) scanf("%d", &b[i]); for (int i = 0, j = m - 1; i < n; i ++ ) // 遍历数组 a 中的每一个元素{while (j >= 0 && a[i] + b[j] > x) j -- ; // 如果当前两个数之和大于目标值,则将指针向左移动以减小总和if (j >= 0 && a[i] + b[j] == x) cout << i << ' ' << j << endl; // 如果找到了一对和等于目标值的数,则输出它们在各自数组中的下标}return 0;
}

在这里插入图片描述

最后

十分感谢你可以耐着性子把它读完和我可以坚持写到这里,送几句话,对你,也对我:

1.如果你想要制造羁绊,就得承担流泪的风险。——《小王子》

2.虽然辛苦,我还是会选择那种滚烫的人生。——北野武

3.有些笑容背后是紧咬牙关的灵魂。 ——柴静

最后如果觉得我写的还不错,请不要忘记点赞✌,收藏✌,加关注✌哦(。・ω・。)

愿我们一起加油,奔向更美好的未来,愿我们从懵懵懂懂的一枚菜鸟逐渐成为大佬。加油,为自己点赞!

http://www.lryc.cn/news/29181.html

相关文章:

  • Javascript借用原型对象继承父类型方法
  • 你不会工作1年了连枚举都还不知道吧?
  • ks通过恶意低绩效来变相裁员(五)绩效申诉就是「小六自证吃了一碗凉粉」
  • 一阶低通滤波介绍及simulink模型
  • 三十三、MongoDB PHP 扩展
  • 2D图像处理:九点标定_上(机械手轴线与法兰轴线重合)(附源码)
  • 2023最新C++面经(一):vector内存预分配,左值引用和右值引用,move语义
  • 【C语言经典例题】调整数组使奇数全部都位于偶数前面
  • C++经典20题型,满满知识,看这一篇就够了(含答案)
  • 卷积神经网络CNN之ZF Net网络模型详解(理论篇)
  • Vue 3.0 响应性 基础 【Vue3 从零开始】
  • flex布局方式让最后一个(或第二个...n)元素居右显示
  • 【Python语言基础】——Python MySQL Order By
  • 自然数学的哲学原理--复数理论的扩展
  • tsconfig.json中的一些配置
  • Spark调优总结
  • 4.创建和加入通道相关(network.sh脚本createChannel函数分析)[fabric2.2]
  • 若依学习(前后端分离版)——自定义注解@Log(如何自定义注解,实现aop)
  • 防止暴力破解ssh的四种方法
  • jsp试卷分析管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • 可选链运算符(?.)与空值合并运算符(??)
  • JavaScript 闭包
  • 每日记录自己的Android项目(二)—Viewbinding,WebView,Navigation
  • 20230305英语学习
  • 【Linux】手把手教你在CentOS上使用docker 安装MySQL8.0
  • 论文解读:High Dynamic Range and Super-Resolution from Raw Image Bursts
  • 国内的PMP考试通过率高达97%?
  • IOC(概念和原理)
  • 操作系统 - 第二章
  • 进程控制~