using
System;
using
System.Collections.Generic;
class
GFG
{
static
List<
string
> consecutiveRanges(
int
[] nums,
int
len)
{
List<
string
> res =
new
List<
string
>();
for
(
int
i = 0 ; i < len ; ) {
int
j = i + 1;
int
l = 1;
while
(j < len && nums[i] + (j - i) == nums[j]) {
l *= 2;
j = i + l;
}
if
(j - i == 1) {
res.Add(nums[i].ToString());
}
else
{
j = j - (l / 2);
while
(j < len
&& nums[i] + (j - i) == nums[j]) {
j++;
}
res.Add(nums[i].ToString() +
"->"
+ nums[j - 1].ToString());
}
i = j;
}
return
res;
}
public
static
void
Main(
string
[] args)
{
int
[] arr1 = { 1, 2, 3, 6, 7 };
int
n = arr1.Length;
List<
string
> ans = consecutiveRanges(arr1, n);
Console.Write(
"["
);
for
(
int
i = 0 ; i < ans.Count ; i++) {
if
(i == ans.Count - 1)
Console.Write(ans[i] +
"]\n"
);
else
Console.Write(ans[i] +
", "
);
}
int
[] arr2 = { -1, 0, 1, 2, 5, 6, 8 };
n = arr2.Length;
ans = consecutiveRanges(arr2, n);
Console.Write(
"["
);
for
(
int
i = 0 ; i < ans.Count ; i++) {
if
(i == ans.Count - 1)
Console.Write(ans[i] +
"]\n"
);
else
Console.Write(ans[i] +
", "
);
}
int
[] arr3 = { -1, 3, 4, 5, 20, 21, 25 };
n = arr3.Length;
ans = consecutiveRanges(arr3, n);
Console.Write(
"["
);
for
(
int
i = 0 ; i < ans.Count ; i++) {
if
(i == ans.Count - 1)
Console.Write(ans[i] +
"]\n"
);
else
Console.Write(ans[i] +
", "
);
}
}
}