Почему увеличивается объем задействованной памяти
Решил посмотреть какие задачи даются на собеседовании в Яндекс. Наткнулся на такое задание, алгоритмическая часть которого не вызвала вопросов, однако не проходит тест по памяти. Так вот вопрос заключается в следующем: по какой причине задействованная память тут может увеличиваться, если количество переменных константно и не зависит от объема входных данных? И как это можно было бы исправить? P.S. Еще пробовал просто со сканнером, но ошибка та же, только валится на 189 тесте.
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = readInt(bf);
if (n == 0) return;
int prevN = readInt(bf);
bw.write(prevN + "\n");
bw.flush();
for (int i = 1; i < n; i++) {
int x = readInt(bf);
if (x != prevN) {
bw.write(x + "\n");
bw.flush();
prevN = x;
}
}
bf.close();
}
static int readInt(BufferedReader bf) throws IOException {
int number = 0;
boolean dig = false;
boolean minus = false;
for (int c = 0; (c = bf.read()) != -1; ) {
if (c == '-') {
c = bf.read();
minus = true;
}
if (c >= '0' && c <= '9') {
dig = true;
number = number * 10 + c - '0';
} else if (dig) {
break;
}
}
if (minus) {
return -number;
}
return number;
}
}
Ответы (2 шт):
Если я правильно понимаю...
У меня была похожая задача, нужно было придумать код который будет принимать числа и сохранять в переменную только максимально заданное число. А после ввода 0 или отрицательного числа выдавать результат максимально введенного числа и завершать программу.
import java.util.Scanner;
import static java.lang.System.*;
public class Executeble {
public static void main(String args[]) {
short ip;
Scanner kb = new Scanner(in);
out.println("введите число.");
ip = kb.nextShort();
short lip = ip;
System.out.println("Num " +ip);
while (ip > 0) {
if (ip < lip) {
System.out.println("Num " +ip);
}
if (ip > lip) {
lip = ip;
System.out.println("Num " +ip);
ip = kb.nextShort();
} else {
ip = kb.nextShort() ;
}
}
kb.close();
out.println("Max Value - " +lip+ ".");
}}
вы можете изменить условие на отображение и получать результат только в тех случаях когда число хранящее в переменной меньше введенного числа. А именно... вот код:
System.out.println("введите число.");
}
if (ip > lip) {
lip = ip;
System.out.println("Num " +ip);
ip = kb.nextShort();
} else {
ip = kb.nextShort() ;
}
}
kb.close();
}}
Чет у вас сильно сложно. Нет никакого смысла вообще строки в числа переводить. Там же уже все упорядоченно, вам надо только убрать дубликаты, а дубликаты числа являются также дублткатами в стоковом виде.
Вот пример (сам не проверял)
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int lines = Integer.parseInt(bf.readLine());
String currentLine = null;
for(int i=0; i<lines; i++)
{
String next = bf.readLine();
if (currentLine == null || !currentLine.equals(next))
{
currentLine = next;
bw.write(currentLine);
bw.write('\n');
}
}
bf.close();
bw.close();
}

