C# Array Change
static long ArrayChange(int[] a)
{
var arr = new long[a.Length];
Array.Copy(a, arr, a.Length);
long min = 0;
for (int k = 0; k < arr.Length - 1; k++)
{
if (arr[k] >= arr[k + 1])
{
var dif = arr[k] - arr[k + 1] + 1;
arr[k + 1] += dif;
min += dif;
}
}
return min;
}
This moves left to right and bumps values only when needed so the array becomes strictly increasing.