Skip to content

Commit b49e3e1

Browse files
committed
algorithms lesson #8
1 parent 8a749fd commit b49e3e1

1 file changed

Lines changed: 60 additions & 0 deletions

File tree

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package lesson8;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.Collections;
6+
import java.util.LinkedList;
7+
import java.util.List;
8+
9+
/**
10+
* Algorithms. Lesson #8. Greedy algorithm
11+
*
12+
* @author Sergey Iryupin
13+
* @version 17 Aug 2023
14+
*/
15+
16+
public class Lesson8 {
17+
public static void main(String[] args) {
18+
// 1 задача - выбор задач
19+
List<Integer> tasks = Arrays.asList(3, 2, 1, 4, 5, 3);
20+
int maxTime = 10;
21+
List<Integer> resolved = taskSelection(tasks, maxTime);
22+
System.out.println(resolved);
23+
24+
// 2 задача - размен монет
25+
List<Integer> coins = Arrays.asList(1, 5, 10, 25);
26+
int amount = 63;
27+
System.out.println(coinChange(coins, amount));
28+
}
29+
30+
static List<Integer> taskSelection(List<Integer> tasks, int maxTime) {
31+
List<Integer> result = new ArrayList<>();
32+
int resultTime = 0;
33+
34+
LinkedList<Integer> sortedTasks = new LinkedList<>(tasks);
35+
Collections.sort(sortedTasks);
36+
while (resultTime < maxTime && maxTime - resultTime >= sortedTasks.peek()) {
37+
int taskTime = sortedTasks.pop();
38+
result.add(taskTime);
39+
resultTime = resultTime + taskTime;
40+
}
41+
return result;
42+
}
43+
44+
static List<Integer> coinChange(List<Integer> coins, int amount) {
45+
List<Integer> result = new ArrayList<>();
46+
47+
Collections.sort(coins);
48+
for (int i = coins.size() - 1; i >= 0; i--) {
49+
while (amount >= coins.get(i)) {
50+
amount = amount - coins.get(i);
51+
result.add(coins.get(i));
52+
}
53+
}
54+
55+
if (amount == 0) {
56+
return result;
57+
}
58+
return Collections.EMPTY_LIST;
59+
}
60+
}

0 commit comments

Comments
 (0)