java---双指针算法_数组元素的目标和(每日一道算法2022.8.1)

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

输入
分别为第一个数组的长度,第二个数组的长度和目标值x
4 5 6
第一个数组
1 2 4 7
第二个数组
3 4 6 8 9
输出
1 1
public class 双指针_数组元素的目标和{
    public static void main(String[] args) {
        //传入数据
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(), m = in.nextInt(), x = in.nextInt();
        int[] a = new int[n], b = new int[m];
        for (int i = 0; i<n; i++) {a[i]=in.nextInt();}
        for (int i = 0; i<m; i++) {b[i]=in.nextInt();}

        //创建双指针i和j,i从a数组的开头开始,j从b数组的结尾开始
        for (int i = 0, j = m-1; i<n; i++){
            //因为两个数组有序,所以当a[i]+b[j]严格意义上大于x的时候,得知当前的b[j]过大,所以就j--
            while (j>=0 && (a[i]+b[j]) > x) {j--;}
            //如果a[i]+b[j]不大于x时,只有两种可能,就是小于或者等于
            //等于的话直接输出下标,然后break,因为解是唯一的
            //小于则将指针i右移一位,进行下一轮的对比
            if (a[i]+b[j] == x) {
                System.out.println(i + " " + j);
                break;
            }
        }
    }
}

今天的题好简单!芜湖~打游戏去了

声明:算法思路来源为y总,详细请见https://www.acwing.com/
本文仅用作学习记录和交流

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值