Я участвовал в конкурсе кодирования, где я пытался решить данную проблему, поэтому я должен предложить решение, которое должно не только пройти все тестовые примеры, но и хорошо оптимизировано с точки зрения сложности времени и пространства, у меня есть прошел 3 из 7, но я все еще не могу идентифицировать остальные тестовые примеры, возможно, я что-то упускаю, пожалуйста, помогите мне исправить приведенное ниже описание проблемы.
ПРОБЛЕМА ЗАЯВЛЕНИЕ:
Крутые девчонки (100 марок)
Профессор Утониум обеспокоен ростом преступности в мире. Количество злодеев и их деятельности значительно увеличилось. Нынешнее трио крутых девчонок не способно бороться со злом всего мира. Профессор решил создать максимальное количество Powerpuff Girls из имеющихся у него ингредиентов.
Для создания Powerpuff Girl требуется N ингредиентов в определенном количестве. У профессора в лаборатории есть все N ингредиентов, и он знает количество каждого доступного ингредиента. Он также знает количество определенного ингредиента, необходимого для создания Суперкрошки. Профессор занят подготовкой и хочет начать как можно скорее.
Злодеи, с другой стороны, хотят разрушить лабораторию и помешать профессору Утониуму создавать больше крутых девчонок. Моджо Джоджо готовится с боеприпасами, и Он возглавляет других злодеев, таких как Принцесса, Мальчики Амеба, Седуса, Гангрин Ганг и т. Д. c.
У профессора мало времени, злодеи скоро доберутся до лаборатории. Он начинает процесс, но не знает, сколько Суперкрошек будет создано. Ему нужна ваша помощь в определении максимального количества Powerpuff Girls, которые будут созданы с текущим количеством ингредиентов.
Пример:
Профессору Утониуму требуется 3 ингредиента для создания Powerpuff Girls. 3 ингредиента присутствуют в лаборатории в указанном количестве:
Чтобы сделать Powerpuff Girl, профессору Утониуму требуется:
3 единицы ингредиента A
6 единиц ингредиента B
10 единиц ингредиента C
Максимальное количество суперкрошек, которое может быть создано - 3, поскольку после 3 у профессора закончится ингредиент C.
Можете ли вы определить максимальное количество?
Формат ввода
Первая строка ввода состоит из количества ингредиентов, N
Вторая строка ввода состоит из N целых чисел, разделенных пробелами, представляющих количество каждого ингредиента, необходимое для создать Суперкрошку.
Третья строка ввода состоит из N целых чисел, разделенных пробелами, представляющих количество каждого ингредиента, присутствующего в лаборатории.
Constraints
1<= N <=10000000 (1e7)
0<= Quantity_of_ingredient <= LLONG_MAX
Output Format
Вывести требуемый результат в виде отдельная строка.
Sample TestCase 1
Input
4
2 5 6 3
20 40 90 50
Output
8
КОД РЕШЕНИЯ
package com.mzk.poi;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class PowerPuffGirls {
private static final String SPACE = " ";
private static final Integer INITAL_IDX = 0;
private static final Integer LOWER_IDX = 1;
private static final Integer SECOND_IDX = 2;
private static final Integer MAX_LINES = 3;
private static final Integer UPPER_IDX = 1000000;
private static String[] UnitsArr = null;
private static String[] totIngrdientsArr = null;
private static int size = 0;
public static void main(String[] args) {
List<Integer> maxPowerPuffGirlsCreationList = new ArrayList<Integer>();
Scanner stdin = new Scanner(System.in);
String[] input = new String[MAX_LINES];
try {
for (int i = 0; i < input.length; i++) {
input[i] = stdin.nextLine();
if (validateIngredienInput(input[INITAL_IDX])) {
System.exit(INITAL_IDX);
}
}
} finally {
stdin.close();
}
int numOfIngredients = Integer.parseInt(input[INITAL_IDX]);
String units = input[LOWER_IDX];
UnitsArr = units.split(SPACE);
String ingredients = input[SECOND_IDX];
totIngrdientsArr = ingredients.split(SPACE);
size = UnitsArr.length;
int[] specifiedArrayOfUnits = convertToIntegerArray(UnitsArr);
int[] totIngredientInLabArray = convertToIntegerArray(totIngrdientsArr);
for (int i = 0; i < size; i++) {
totIngredientInLabArray[i] = Integer.parseInt(totIngrdientsArr[i]);
}
for (int i = 0; i < numOfIngredients; i++) {
maxPowerPuffGirlsCreationList.add(totIngredientInLabArray[i] / specifiedArrayOfUnits[i]);
}
System.out.println(Collections.min(maxPowerPuffGirlsCreationList));
}
/**
* This method validates the first input
* @param noOfIngredients
* @return boolean
*/
private static boolean validateIngredienInput(String noOfIngredients) {
int numOfIngredients = Integer.parseInt(noOfIngredients);
boolean result = false;
if (numOfIngredients <= LOWER_IDX && numOfIngredients <= UPPER_IDX) {
result = true;
return result;
}
return result;
}
/**
* This utility method convert the String array to Integer array
* @param size
* @param specifiedArrayOfUnits
* @return int[]
*/
private static int[] convertToIntegerArray(String[] arrayToBeParsed) {
int array[] = new int[size];
for (int i = INITAL_IDX; i < size; i++) {
array[i] = Integer.parseInt(arrayToBeParsed[i]);
}
return array;
}
}
Вышеупомянутое решение прошло 3 тестовых примера, остальные 7 не идентифицированы. Пожалуйста, помогите мне исправить или улучшить этот код.