Дано число x. Нужно найти сумму чисел равную x, с ограничениями по времени и памяти
Дано целое положительное число "x". Также дана последовательность из целых положительных чисел. Необходимо записать в выходной файл "1", если в последовательности есть два числа сумма, которых равна значению "x" или "0" если таких нет. Ограничение времени 1 секунда, Ограничение памяти 64Mb, Ввод input.txt, Вывод output.txt. Мой пример:
public static void main(String[] args) {
String s;
int result;
int target = 0;
String nums = "";
try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("input.txt"), StandardCharsets.UTF_8));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("output.txt"), StandardCharsets.UTF_8))) {
boolean isFirst = true;
while ((s = br.readLine()) != null) {
if (isFirst) {
target = Integer.parseInt(s);
isFirst = false;
} else {
nums = s;
}
}
int[] intArr = fromStringToIntArray(nums);
result = getResult(intArr, target);
bw.write(String.valueOf(result));
} catch (IOException ex) {
}
}
private static int[] fromStringToIntArray(String nums) {
String[] numsArr = nums.split(" ");
int[] intArr = new int[numsArr.length];
for (int i = 0; i < numsArr.length; i++) {
intArr[i] = Integer.parseInt(numsArr[i]);
numsArr[i] = null;
}
return intArr;
}
private static int getResult(int[] intArr, int target) {
Arrays.sort(intArr);
int result = 0;
int first = 0;
int last = intArr.length - 1;
while (first < last) {
int ss = intArr[first] + intArr[last];
if (ss == target) {
result = 1;
break;
} else {
if (ss < target) {
first++;
} else {
last--;
}
}
}
return result;
}
Ответы (1 шт):
Автор решения: albertF
→ Ссылка
public class Main {
static int result = 0;
static int nextInt;
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("input.txt"), StandardCharsets.UTF_8));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("output.txt"), StandardCharsets.UTF_8))) {
setResult(br);
bw.write(String.valueOf(result));
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
private static void setResult(BufferedReader br) throws IOException {
int a;
int target;
int number = 0;
HashSet<Integer> set = new HashSet<>();
target = getNumber(br, getNextNumber(br));
while ((a = getNextNumber(br)) != -1) {
if (IsDigit(a)) {
number = getNumber(br, a);
if (set.contains(target - number)) {
result = 1;
break;
}
set.add(number);
}
}
}
private static boolean IsDigit(int c) {
return c >= '0' && c <= '9';
}
private static int getNextNumber(BufferedReader br) throws IOException {
nextInt = br.read();
return nextInt;
}
private static int getNumber(BufferedReader br, int a) throws IOException {
int num = a - '0';
while (IsDigit(getNextNumber(br))) {
num = num * 10 + (nextInt - '0');
}
return num;
}
}