atm + ranges solution
This commit is contained in:
50
src/main/java/com/algos/om/Ranges.java
Normal file
50
src/main/java/com/algos/om/Ranges.java
Normal 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;
|
||||
}
|
||||
}
|
||||
46
src/main/java/com/algos/shortcut/Atm.java
Normal file
46
src/main/java/com/algos/shortcut/Atm.java
Normal 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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user