I would like to count subsequently equal values in an int array and return an array with the count and another array with the value order.
E.g. i would like to transform:
JavaScript
x
int arr = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,0,0,0,1,1,1,2,2,2,2,0,0,0,0};
To:
JavaScript
int arr = {11,5,4,3,3,4,4}; // The count
int idx = {0,1,2,0,1,2,0}; // The order
Can you help me achieve this?
Advertisement
Answer
This should do the job:
JavaScript
int[] arr = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,0,0,0,1,1,1,2,2,2,2,0,0,0,0};
//First determine how many subsequently equal values there are
int countEquals = 1;
for (int i = 1; i < arr.length; i++) {
if (arr[i] != arr[i-1]) {
countEquals++;
}
}
//Then calculate the order and count
int[] count = new int[countEquals];
int[] order = new int[countEquals];
int index = 0;
Arrays.fill(count, 1);
for (int i = 1; i < arr.length; i++) {
if (arr[i] == arr[i-1]) {
count[index]++;
} else {
order[index] = arr[i-1];
index++;
}
}