如何在Java中操作数组



从一个1索引的零数组和一个操作列表开始,对于每个操作,我必须为两个给定索引(包括两个索引(之间的每个数组元素添加值。执行完所有操作后,我必须返回数组中的最大值。但对于大多数测试用例,错误的答案每次都会出现,对于某些测试用例,时间限制已经超过。请帮我解决这个问题。

我使用arrayManipulation函数来获取数组元素的数量,并查询数组。update函数用于更新(添加元素(数组。

import java.util.*;
import java.util.Arrays;
public class sample
{
public static void main(String args[])
{
int maximum=0;
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
int queries[][]=new int[m][3];
for(int x=0;x<m;x++)
{
for(int y=0;y<3;y++)
{
queries[x][y]=sc.nextInt();
}
}
maximum=arrayManipulation(n,queries);
System.out.println(maximum);
}
public static int arrayManipulation(int num,int qry[][])
{
int a=0,b=0,k=0;
int max=Integer.MIN_VALUE;
int arr[]=new int[num];
int arr2[]=new int[num];
for(int i=0;i<num;i++)
{
arr[i]=0;
}
for(int j=0;j<qry.length;j++)
{
for(int kl=0;kl<qry[0].length;kl++)
{
a=qry[j][kl];
b=qry[j][kl+1];
k=qry[j][kl+2];
break;
}
arr2=update(a,b,k,arr);
int lengtharr2=arr2.length;
max=Math.max(max,arr2[lengtharr2-1]);
}
return max;
}
public static int[] update(int a1,int b1, int k1,int array[])
{
for(int i=a1;i<b1;i++)
{
array[i]+=k1;
}
Arrays.sort(array);
return array;
}
}

输入:10表示数组元素的数量,3表示由a、b、k值组成的查询数量,其含义如下:左索引、右索引和被加数

10 3

1 5 3

4 8 7

6 9 1

我的输出:

11

预期输出:

10

在这个for循环中:

for(int kl=0;k<qry[0].length;k++)
{
a=qry[j][kl];
b=qry[j][kl+1];
k=qry[j][kl+2];
break;
}

为什么在循环条件中使用两个不同的变量(kkl(?

无论如何,您应该为循环使用除k之外的变量,因为您要更新k的值,然后在循环的每次迭代中执行k++,这很可能会打乱您的输出。

比如:

for(int l=0;l<qry[0].length;l++)
{
a=qry[j][kl];
b=qry[j][kl+1];
k=qry[j][kl+2];
break;
}

相关内容

最新更新