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