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

news/2025/2/13 10:49:38/

题目

给定两个升序排序的有序数组 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

来源:acwing算法基础 800. 数组元素的目标和


思路(注意事项)

双指针,一个从前面遍历,一个从后面遍历。相较于暴力解O(n^2),区别是后面的指针不会倒退


纯代码

#include<bits/stdc++.h>
using namespace std;const int N = 1e5 + 1;
int a[N], b[N];int main()
{int n, m, x;cin >> 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]);int i = 0, j = m - 1;while (a[i] + b[j] != x)if (a[i] + b[j] > x) j --;else i ++;cout << i << " " << j << endl;return 0; 
}

题解(带注释)

#include<bits/stdc++.h>
using namespace std;const int N = 1e5 + 1; // 定义数组最大长度
int a[N], b[N];        // a和b分别存储两个输入数组int main() {int n, m, x;       // n-数组a的长度,m-数组b的长度,x-目标和cin >> n >> m >> x; // 输入n, m, x// 输入数组afor (int i = 0; i < n; i++) scanf("%d", &a[i]);// 输入数组bfor (int i = 0; i < m; i++) scanf("%d", &b[i]);// 双指针算法:i从a的起始位置开始,j从b的末尾开始int i = 0, j = m - 1;while (a[i] + b[j] != x) { // 当a[i] + b[j]不等于x时循环if (a[i] + b[j] > x) j--; // 如果和大于x,移动j向左(减小和)else i++;                 // 如果和小于x,移动i向右(增大和)}// 输出满足条件的下标i和jcout << i << " " << j << endl;return 0;
}

http://www.ppmy.cn/news/1571690.html

相关文章

【ESP32指向鼠标】——icm20948与esp32通信

【ESP32指向鼠标】——icm20948与esp32通信 ICM-20948介绍 ICM-20948 是一款由 InvenSense&#xff08;现为 TDK 的一部分&#xff09;生产的 9 轴传感器集成电路。它结合了 陀螺仪、加速度计和磁力计。 内置了 DMP&#xff08;Digital Motion Processor&#xff09;即负责执…

UDP小实验

需求&#xff1a; csharp 如果客户端发送的消息是 "time\n"&#xff0c;服务器会获取当前的本地时间&#xff0c; 并将其格式化为 YYYY-MM-DD HH:MM:SS 的字符串发送给客户端。 如果客户端发送的消息不是 "time\n"&#xff0c;服务器会返回 "cmd erro…

VUE 解决若依出现Error: Cannot find module ‘@/views/xxx‘问题

VUE 解决若依出现Error: Cannot find module ‘/views/xxx‘问题 Error: Cannot find module ‘/views/xxx‘问题 Error: Cannot find module ‘/views/xxx‘问题 vue 版菜单点不开&#xff0c;报错&#xff1a;Error: Cannot find module ‘/views/xxx’ 。后台、vue前端启动…

音视频协议

1. 多媒体信息 1.1 多媒体信息的两个主要特点&#xff1a; 信息量很大 标准语音&#xff1a;64Kbits(8KHz采样&#xff0c;8位编码)高质量音频&#xff1a;3Mbps(100KHz采样&#xff0c;12位编码) 在传输多媒体数据时&#xff0c;对时延和时延抖动均有较高要求 1.2 处理时延…

(一)Axure制作移动端登录页面

你知道如何利用Axure制作移动端登录页面吗&#xff1f;Axure除了可以制作Web端页面&#xff0c;移动端也是可以的哦&#xff0c;下面我们就一起来看一下Axure制作移动端登录页面的过程吧。 第一步&#xff1a;从元件中拖入一个矩形框&#xff0c;并设置其尺寸为&#xff1a;37…

【Java进阶打卡】JDBC-JDBC快速入门

【Java进阶打卡】JDBC-JDBC快速入门 概述快速入门 概述 快速入门 package com.itheima01;import java.sql.*;public class JDBC01 {public static void main(String[] args) throws ClassNotFoundException, SQLException {// 导入jar包 项目文件下面 创建libs文件夹 该ja…

称呼计算器:智能科技,简化您的计算生活

一款手机应用程序&#xff0c;安卓设备上使用。这款计算器应用以其简洁的界面、实用的功能和良好的用户体验而受到用户的喜爱。 计算器的主要特点包括&#xff1a; 基本计算功能&#xff1a;支持加、减、乘、除等基本运算。 科学计算器模式&#xff1a;提供更高级的数学运算功…

LVS 负载均衡集群(NAT模式)

一、环境准备 四台主机&#xff08;一台 LVS、两台 RS、一台客户端&#xff09; 1.1.LVS 主机 LVS 主机&#xff08;两块网卡&#xff09; 第一块&#xff1a;NAT模式&#xff08;内网&#xff09; 第二块&#xff1a;添加网卡&#xff08;仅主机模式&#xff09;&#xff0…