您现在的位置是:首页 > 编程 > 

数组元素的目标和(蓝桥杯每日一题)

2025-07-23 16:02:38
数组元素的目标和(蓝桥杯每日一题) 数组元素的目标和(蓝桥杯每日一题)给定两个升序排序的有序数组 A和 B,以及一个目标值 x。数组下标从 0 开始。请你求出满足 A[i]+B[j]=x 的数对 (i,j)。数据保证有唯一解。输入格式 第一行包含三个整数 n,m,x,分别表示 A 的长度,B 的长度以及目标值 x。第二行包含 n 个整数,表示数组 A。第三行包含 m 个整数,表示数组 B。输出格

数组元素的目标和(蓝桥杯每日一题)

数组元素的目标和(蓝桥杯每日一题)

给定两个升序排序的有序数组 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 4 6 8 9 输出样例: 1 1

算法思路

这是一个双指针算法,首先是设置两个指针,一个i,一个j,然后i从前往后走,然后j从后往前走,在走的过程中设置一个循环,这个循环中需要判断你的是,j是否走出去了,越界了,然后a[i]+b[j]是否大于x,如果没有的话,继续缩小范围,最后,写一个if判断一下,当前的a[i] + b[j]是否等于x,如果等于了,这个时候就需要打印这次的这个结果。

C++

代码语言:javascript代码运行次数:0运行复制
#include<bits/stdc++.h>
using namespace std;

ct int  = 100010;
int n, m;
int x;
int a[], b[];
int main()
{
    cin >> n >> m >> x;
    for (int i = 0; i < n; ++ i) cin >> a[i];
    for (int j = 0; j < m; ++ j) cin >> b[j];
    for (int i = 0, j = m - 1; i < n; ++ i) // 双指针算法 设置两个指针i,j 
    // i从前往后走 j从后往前走
    {
        while (j >= 0 && a[i] + b[j] > x) j --; // 首先需要判断一下是否 i,j走出界
                                                // 然后判断一下首尾的元素的和是否大于目标值x
                                                // 如果大于那么j--缩小范围
        if (a[i] + b[j] == x) // 如果等于了 就输出结果
        {
            printf("%d %d\n", i, j);   
            break;
        }
    }
    return 0;
}

Java

代码语言:javascript代码运行次数:0运行复制
#include<bits/stdc++.h>
using namespace std;

ct int  = 100010;
int n, m;
int x;
int a[], b[];
int main()
{
    cin >> n >> m >> x;
    for (int i = 0; i < n; ++ i) cin >> a[i];
    for (int j = 0; j < m; ++ j) cin >> b[j];
    for (int i = 0, j = m - 1; i < n; ++ i) // 双指针算法 设置两个指针i,j 
    // i从前往后走 j从后往前走
    {
        while (j >= 0 && a[i] + b[j] > x) j --; // 首先需要判断一下是否 i,j走出界
                                                // 然后判断一下首尾的元素的和是否大于目标值x
                                                // 如果大于那么j--缩小范围
        if (a[i] + b[j] == x) // 如果等于了 就输出结果
        {
            printf("%d %d\n", i, j);   
            break;
        }
    }
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:202-02-24,如有侵权请联系 cloudcommunity@tencent 删除数组算法指针int数据

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1144678.html

相关标签:无
上传时间: 2025-07-19 11:07:03
留言与评论(共有 10 条评论)
本站网友 嘉兴租房
0秒前 发表
C++代码语言:javascript代码运行次数:0运行复制#include<bits/stdc++.h> using namespace std; ct int = 100010; int n
本站网友 深圳康佳电视维修
17分钟前 发表
最后
本站网友 心理ct
10分钟前 发表
这个时候就需要打印这次的这个结果
本站网友 广州人流医院
13分钟前 发表
j); break; } } return 0; }本文参与 腾讯云自媒体同步曝光计划
本站网友 停车位面积
7分钟前 发表
数据范围 数组长度不超过 105
本站网友 死链检查
3分钟前 发表
写一个if判断一下
本站网友 曙光服务器
13分钟前 发表
j)
本站网友 烟台金沙滩
22分钟前 发表
数据保证有唯一解
本站网友 柯桥玉兰花园
20分钟前 发表
首先是设置两个指针