AcWing 800. 数组元素的目标和

2024-03-05 08:52
文章标签 数组 元素 目标 800 acwing

本文主要是介绍AcWing 800. 数组元素的目标和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Problem: AcWing 800. 数组元素的目标和

文章目录

  • 思路
  • 解题方法
  • 复杂度
  • Code

思路

这是一个双指针问题。我们有两个排序数组,我们需要找到两个数,一个来自每个数组,它们的和等于目标值。我们可以在第一个数组中从左到右遍历,同时在第二个数组中从右到左遍历。如果当前的和大于目标值,我们就将第二个数组的指针向左移动;如果当前的和小于目标值,我们就将第一个数组的指针向右移动。当找到和等于目标值的两个数时,我们就可以停止遍历。

解题方法

初始化两个指针,一个指向第一个数组的开始,另一个指向第二个数组的结束。
遍历第一个数组,对于每个元素,检查它与第二个数组当前元素的和是否等于目标值。
如果和大于目标值,将第二个数组的指针向左移动。
如果和小于目标值,将第一个数组的指针向右移动。
如果找到和等于目标值的两个数,打印它们的索引并停止遍历。

复杂度

时间复杂度:

O ( n + m ) O(n + m) O(n+m),其中 n 和 m 分别是两个数组的长度。在最坏的情况下,我们可能需要遍历两个数组的所有元素。

空间复杂度:

O ( 1 ) O(1) O(1),我们只使用了常数级别的额外空间。

Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;public class Main {static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static StreamTokenizer sr = new StreamTokenizer(in);static int MAXN = (int) (1e5 + 10);static int[] arr1 = new int[MAXN];static int[] arr2 = new int[MAXN];static int n, m, x;public static void main(String[] args) throws IOException {n = nextInt();m = nextInt();x = nextInt();for (int i = 0; i < n; i++) {arr1[i] = nextInt();}for (int i = 0; i < m; i++) {arr2[i] = nextInt();}for (int i = 0, j = m - 1; i < n; i++) {while (j >= 0 && arr1[i] + arr2[j] > x)j--;if (arr1[i] + arr2[j] == x) {out.printf("%d %d\n", i, j);break;}}out.flush();}static int nextInt() throws IOException {sr.nextToken();return (int) sr.nval;}}

这篇关于AcWing 800. 数组元素的目标和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/775953

相关文章

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

C语言:柔性数组

数组定义 柔性数组 err int arr[0] = {0}; // ERROR 柔性数组 // 常见struct Test{int len;char arr[1024];} // 柔性数组struct Test{int len;char arr[0];}struct Test *t;t = malloc(sizeof(Test) + 11);strcpy(t->arr,

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou

遮罩,在指定元素上进行遮罩

废话不多说,直接上代码: ps:依赖 jquer.js 1.首先,定义一个 Overlay.js  代码如下: /*遮罩 Overlay js 对象*/function Overlay(options){//{targetId:'',viewHtml:'',viewWidth:'',viewHeight:''}try{this.state=false;//遮罩状态 true 激活,f

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

JS和jQuery获取节点的兄弟,父级,子级元素

原文转自http://blog.csdn.net/duanshuyong/article/details/7562423 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。 JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素。 <div id="test"><div></div><div></div