Sponsored
Sponsored
This approach involves detecting the start and end of each range by iterating through the array sequentially. You remember the start of a potential range and adjust the range's end as long as consecutive numbers are found. When a break in consecutiveness occurs, you fix the end of the current range and start a new one.
Time Complexity: O(n)
Space Complexity: O(n)
1
2using System;
3using System.Collections.Generic;
4
5public class Solution {
6 public IList<string> SummaryRanges(int[] nums) {
7 List<string> result = new List<string>();
8 int i = 0;
9 while (i < nums.Length) {
10 int start = i;
11 while (i + 1 < nums.Length && nums[i] + 1 == nums[i + 1]) {
12 i++;
13 }
14 if (start == i) {
15 result.Add(nums[start].ToString());
16 } else {
17 result.Add(nums[start] + "->" + nums[i]);
18 }
19 i++;
20 }
21 return result;
22 }
23}
24
The C# solution uses a List to store ranges. Like the other solutions, it iterates through the nums array, appending non-overlapping consecutive number ranges as strings to the list, then returns it.
This approach utilizes a two-pointer method where one pointer marks the beginning of a new range, and another pointer (or the loop index itself) expands the range as far as possible until the next number isn't consecutive. Once a sequence ends, if numbers are the same, it is a single-element range; otherwise, a range connecting two different numbers is formed.
Time Complexity: O(n)
Space Complexity: O(n)
1
#include <vector>
#include <string>
using namespace std;
vector<string> summaryRanges(vector<int>& nums) {
vector<string> result;
int n = nums.size();
int i = 0;
while (i < n) {
int start = i;
int j = i;
while (j + 1 < n && nums[j] + 1 == nums[j + 1]) {
j++;
}
if (start == j) {
result.push_back(to_string(nums[start]));
} else {
result.push_back(to_string(nums[start]) + "->" + to_string(nums[j]));
}
i = j + 1;
}
return result;
}
In C++, a nested loop designates two pointers to start and expand through the array, denoting where numbers are not consecutive anymore. It uses the starting and ending pointers to create a string of the range.