diff --git a/src/main/java/com/algos/om/Ranges.java b/src/main/java/com/algos/om/Ranges.java new file mode 100644 index 0000000..1c8d25d --- /dev/null +++ b/src/main/java/com/algos/om/Ranges.java @@ -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 getRanges(int[] source) { + + List 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; + } +} \ No newline at end of file diff --git a/src/main/java/com/algos/shortcut/Atm.java b/src/main/java/com/algos/shortcut/Atm.java new file mode 100644 index 0000000..fd747d7 --- /dev/null +++ b/src/main/java/com/algos/shortcut/Atm.java @@ -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(); + } +} \ No newline at end of file