Как манипулировать массивом в Java? - PullRequest
0 голосов
/ 04 ноября 2019

Начиная с 1-индексированного массива нулей и списка операций, для каждой операции я должен добавить значение к каждому из элементов массива между двумя указанными индексами включительно. После того, как все операции были выполнены, я должен вернуть максимальное значение в массиве. Но неправильный ответ приходит каждый раз для большинства тестовых случаев, а для некоторых тестов ограничение по времени превышает. Пожалуйста, помогите мне решить эту проблему.

Я использую функцию arrayManipulation, чтобы получить количество элементов массива и массив запросов. Функция обновления используется для обновления (добавления элемента) массива.

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 87

6 9 1

Мой вывод:

11

Ожидаемый вывод:

10

1 Ответ

1 голос
/ 04 ноября 2019

В этом цикле 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;
}

Почему вы используете две разные переменные (k и kl) в условии цикла?

Независимо от того, вы должны использоватьпеременная other благодарит 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...