首页 > 编程语言 >三种语言实现双指针解决数组元素的目标和(C++/Python/Java)

三种语言实现双指针解决数组元素的目标和(C++/Python/Java)

时间:2024-08-01 11:05:51浏览次数:14  
标签:Java Python C++ int while 数组 sc

题目

给定两个升序排序的有序数组 A 和 B,以及一个目标值 x。

数组下标从 0 开始。

请你求出满足 A[i]+B[j]=x的数对 (i,j)。

数据保证有唯一解。

输入格式

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

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

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

输出格式

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

数据范围

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

输入样例:

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

输出样例:

1 1

C++

#include <bits/stdc++.h>
 
using namespace std;
 
const int N = 100010;
int a[N], b[N];
 
int main()
{
    int n, m, x;
    cin >> n >> m >> x;
    for(int i = 1; i <= n; i++)
        cin >> a[i];
    for(int i = 1; i <= m; i++)
        cin >> b[i];
    for(int i = 1, j = m; i <= n && j >= 1; i++)
    {
        while(a[i] + b[j] > x)
            j--;
        if(a[i] + b[j] == x)
        {
            cout << i-1 << " " << j-1 << endl;
            break;
        }
    }
}

Python

n, m, x = map(int, input().split())

a = list(map(int, input().split()))
b = [int(x) for x in input().split()]

i = 0
j = m-1

while i < n and j >= 0:
    while a[i] + b[j] > x:
        j -= 1
    if a[i] + b[j] == x:
        print("%d %d" % (i,j))
        break
    i += 1

Java

import java.util.*;
 
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int x = sc.nextInt();
        int[] a = new int[n+1];
        int[] b = new int[m+1];
        for(int i = 1; i <= n; i++)
            a[i] = sc.nextInt();
        for(int i = 1; i <= m; i++)
            b[i] = sc.nextInt();
        for(int i = 1, j = m; i <= n && j >= 1; i++)
        {
            while(a[i] + b[j] > x)
                j--;
            if(a[i] + b[j] == x)
            {
                System.out.printf("%d %d",i-1,j-1);
                break;
            }
        }
    }
}

标签:Java,Python,C++,int,while,数组,sc
From: https://www.cnblogs.com/fang0218/p/18336253

相关文章

  • C++对象析构顺序问题——由QObject::desroyed展开的思考
    C++对象析构顺序问题——由QObject::desroyed展开的思考C++析构函数执行的顺序是最先执行继承链最末端的子类的,最后执行顶层的基类的。而QObject::destroyed(QObject*obj=nullptr)信号在Qt文档中说是“在obj被完全析构时之前立即触发,并且不会被阻塞”。这里的“完全析......
  • JavaScript入门须知
    一、JavaScript概念1.javascript是一门跨平台,面向对象的脚本语言,用来控制网页行为,可使网页交互2.java和js完全不一样,无论是概念还是设计都是完全不一样的,但是它们的基础语法相似。3.在1995年由BrendanErich发明,于1997年成为ECMA的标准4.ECMA欧洲协会标准,ECMAScript(ES6)是......
  • Java I/O的进化:从I/O到NIO
    引言JavaI/O(Input/Output)是Java程序中处理输入和输出的基本方式,包括文件操作、网络通信等。随着Java平台的发展,JavaNIO(NewInput/Output)作为JavaI/O的一个重要补充,提供了更为高效和灵活的I/O操作方式。本文将深入讲解JavaI/O模型、NIO的原理,以及如何在实际应用中使用N......
  • Java反射机制及其应用
    Java反射机制及其应用引言Java反射机制是Java语言的一项强大特性,它允许程序在运行时查询、访问和修改类、接口、方法、构造函数等的属性和行为。反射机制在动态代理、框架开发、依赖注入等领域有着广泛的应用。本文将介绍反射的基本概念、如何使用反射,以及反射在动态代理......
  • 常见的排序算法(Java实现)
      一、冒泡排序      相邻的两个元素比较,大的放右边,小的放左边。二、选择排序   从0索引开始,把每一个索引依次跟后面的索引比较,大的放后面,小的放前面三、插入排序  将数组分为有序和无须两种,遍历数组将无须的数组插入有序的数组当中四、快......
  • 【远程驰骋:Python SSH 自动化运维实战笔记】
    使用GqylpySSH库简化SSH命令执行在自动化运维或脚本编写中,经常需要通过SSH连接到远程服务器执行命令。虽然Python的paramiko库提供了强大的SSH功能,但直接使用它进行命令执行和结果处理可能会显得有些繁琐。GqylpySSH库封装了paramiko,提供了一个更加简洁易用的接口......
  • Java中的运算符
    运算符目录运算符运算符的分类算术运算符关系运算符位运算符逻辑运算符短路逻辑运算符赋值运算符条件运算符(?:)instanceof运算符Java运算符优先级运算符的分类计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运......
  • Java流程控制结构中的分支结构
    分支结构目录分支结构if...else分支结构switch-case分支结构在Java编程中,分支结构是控制程序流程的重要工具,它允许程序根据不同的条件执行不同的代码块。Java提供了两种主要的分支结构:if-else和switch-case。本文将详细介绍这两种结构的工作原理、语法规则以及实战应用,帮助读者......
  • Java中类和对象
    类和对象1.面向对象与面向过程面向对象(ObjectOrientedProgramming,OOP)与面向过程(ProcedureOrientedProgramming,POP)是两种不同的编程范式,它们在编程思想、特点、优势及应用场景等方面存在显著差异。一、编程思想面向过程:以过程为中心,关注于“做什么”,即解决问题的步......
  • c++含有纯虚函数的虚基类是否能构造?
    前言笔者工作中有很多类派生自一个虚基类,但是这些派生类又有很多操作是大致相同,尤其是这些类都不能拷贝,所以需要删除拷贝构造函数和拷贝赋值运算符。最直接的想法是在虚基类里面删除拷贝构造函数和拷贝赋值运算符。但我想因为虚基类不能实例化,那是否可以定义常规构造函数、......