-
Notifications
You must be signed in to change notification settings - Fork 38
/
Copy pathMinimumWalkingDistance.java
93 lines (72 loc) · 2.65 KB
/
MinimumWalkingDistance.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import java.util.*;
public class MinimumWalkingDistance {
static Scanner input = new Scanner(System.in);
public static void inputArray(int[] array) {
for (int i = 0; i < array.length; i++) {
array[i] = input.nextInt();
}
}
public static void merge(int[] array, int low, int mid, int high) {
int size1 = mid - low + 1;
int size2 = high - mid;
int[] array1 = new int[size1];
int[] array2 = new int[size2];
for (int iter1 = 0; iter1 < size1; iter1++) {
array1[iter1] = array[iter1 + low];
}
for (int iter2 = 0; iter2 < size2; iter2++) {
array2[iter2] = array[iter2 + mid + 1];
}
int iter1 = 0, iter2 = 0, mergeIter = low;
// while (iter1 < size1 || iter2 < size2) {
// int curr = Integer.max(iter1 < size1 ? array1[iter1++] : Integer.MIN_VALUE,
// iter2 < size2 ? array2[iter2++] : Integer.MIN_VALUE);
// array[mergeIter++] = curr;
// }
while (iter1 < size1 && iter2 < size2) {
if (array1[iter1] > array2[iter2])
array[mergeIter++] = array1[iter1++];
else
array[mergeIter++] = array2[iter2++];
}
while (iter1 < size1)
array[mergeIter++] = array1[iter1++];
while (iter2 < size2)
array[mergeIter++] = array2[iter2++];
}
public static void printArray(int[] array, int low, int high) {
for (int i = low; i <= high; i++) {
System.out.print(array[i] + " ");
}
}
public static void sort(int[] array, int low, int high) {
if (low < high) {
int mid = low + (high - low) / 2;
sort(array, low, mid);
sort(array, mid + 1, high);
merge(array, low, mid, high);
}
}
public static int power(int base, int exp) {
if (exp > 0) {
return base * power(base, exp - 1);
}
return 1;
}
public static int calculateMiles(int[] calories, int index) {
if (index < calories.length) {
return power(2, index) * calories[index] + calculateMiles(calories, index + 1);
}
return 0;
}
public static void main(String[] a) {
System.out.println("Enter number of cupcakes");
int size = input.nextInt();
int[] calories = new int[size];
System.out.println("Enter calories of each cupcake");
inputArray(calories);
sort(calories, 0, calories.length - 1);
printArray(calories, 0, calories.length - 1);
System.out.println(calculateMiles(calories, 0));
}
}