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

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

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

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

算法思路

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

C++

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int n, m;
int x;
int a[N], b[N];
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

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int n, m;
int x;
int a[N], b[N];
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;
}


相关文章
|
4月前
|
机器学习/深度学习 Java BI
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-970 数组移动
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-970 数组移动
51 0
|
4月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-49 算法训练 寻找数组中最大值
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-49 算法训练 寻找数组中最大值
49 0
|
3月前
蓝桥杯动态规划-第五弹 最大子数组和 买卖股票最佳时机IV 第N个泰波那契数 环形数组
蓝桥杯动态规划-第五弹 最大子数组和 买卖股票最佳时机IV 第N个泰波那契数 环形数组
|
3月前
|
Java
2022蓝桥杯大赛软件类省赛Java大学B组G题 数组切分
2022蓝桥杯大赛软件类省赛Java大学B组G题 数组切分
21 0
|
算法 Java
2015 蓝桥杯省赛部分题整理(九数组分数,牌型种数,串逐位和,循环节长度,打印菱形)
2015 蓝桥杯省赛部分题整理(九数组分数,牌型种数,串逐位和,循环节长度,打印菱形)
84 0
|
4月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-493 合并排序数组
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-493 合并排序数组
40 0
|
4月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-79 删除数组零元素
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-79 删除数组零元素
35 0
|
4月前
|
存储 Java 索引
第十四届蓝桥杯集训——数组(一维)
第十四届蓝桥杯集训——数组(一维)
64 0
|
4月前
|
人工智能 算法 Java
截断数组(蓝桥杯每日一题)
截断数组(蓝桥杯每日一题)
39 0
|
4月前
蓝桥杯vip测试题系统-数组求和(解题思路以及解题代码,手画思路图虽然丑丑的)
蓝桥杯vip测试题系统-数组求和(解题思路以及解题代码,手画思路图虽然丑丑的)
49 0