atm + ranges solution

This commit is contained in:
Leonid
2025-04-08 10:57:42 +03:00
parent f40b140249
commit a2132695d3
2 changed files with 96 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
package com.algos.om;
//Вам дан отсортированный массив уникальных целых чисел nums.
//
// Диапазон [a, b] — это набор всех целых чисел от a до b (включительно).
//
// Верните наименьший отсортированный список диапазонов, которые покрывают все числа в массиве точно.
// То есть, каждый элемент nums должен быть покрыт ровно одним из диапазонов,
// и не должно быть такого числа x, которое находится в одном из диапазонов, но отсутствует в nums.
//
// Каждый диапазон [a, b] в списке должен быть представлен в следующем формате:
//
// "a->b", если a != b
// "a", если a == b
//
// Пример:
// Вход: [1, 2, 3, 5, 6, 8]
// Выход: ["1->3", "5->6", "8"]
import java.util.ArrayList;
import java.util.List;
public class Ranges {
public static void main(String[] args) {
// int[] source = new int[]{1, 2, 3, 5, 6, 8};
int[] source = new int[]{1, 3, 4, 5, 6, 8, 9};
System.out.println(getRanges(source));
}
public static List<String> getRanges(int[] source) {
List<String> result = new ArrayList<>();
int begin = source[0];
int end = source[0];
for (int i = 1; i < source.length; i++) {
int nextValue = source[i];
if (nextValue - end > 1) {
result.add(begin == end ? String.valueOf(end) : begin + "->" + end);
begin = nextValue;
}
end = nextValue;
}
result.add(begin == end ? String.valueOf(end) : begin + "->" + end);
return result;
}
}

View File

@@ -0,0 +1,46 @@
package com.algos.shortcut;
import java.util.Arrays;
// В банкомате доступны банкноты различных номиналов, например, [100, 500, 1000].
// Вам необходимо написать программу, которая по заданной сумме определяет минимальное количество банкнот,
// необходимое для выдачи этой суммы. Допускается использовать любое количество банкнот каждого номинала.
//
// Если точно составить требуемую сумму с использованием имеющихся номиналов невозможно,
// программа должна вернуть -1.
public class Atm {
public static void main(String[] args) {
int[] banknotes = {100, 500, 1000};
// int[] banknotes = {1000, 100, 500};
// int amount = 1500;
int amount = 1803;
// int amount = 1800;
// int amount = 600;
int result = minBanknotes(banknotes, amount);
System.out.println(result);
}
private static int minBanknotes(int[] banknotes, int amount) {
Arrays.sort(banknotes);
int[] result = new int[banknotes.length];
for (int i = banknotes.length - 1; i >= 0; i--) {
if (amount < banknotes[i]) {
continue;
}
result[i] = amount / banknotes[i];
amount = amount % banknotes[i];
}
if (amount != 0) {
return -1;
}
return Arrays.stream(result).sum();
}
}