OneCompiler

Merge overlapping intervals

147
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace OneCompiler
{
	public class Program
	{
		public static void Main(string[] args)
		{
			
			int[][] intervals = 
			{
			  new int[]{1, 3}, 
			  new int[]{2, 6}, 
			  new int[]{8, 10}, 
			  new int[]{15, 18}
			};
			
			var mergedIntervals = MergeIntervals(intervals);
			
			for (int i = 0; i < mergedIntervals.Length; i++)
			{
			  Console.Write("[" + mergedIntervals[i][0] + "," + mergedIntervals[i][1] + "]" + " ");
			}
		}
		
		private static int StringToInteger(string s)
		{
		  return int.Parse(s);
		}
		
		private static int[][] MergeIntervals(int[][] arr)
		{
		  int n = arr.Length;
		  
		  if (n == 0 || n == 1)
		  {
		    return arr;
		  }
		  
		  var stack = new Stack<int[]>();
		  
		  stack.Push(arr[0]);
		  
		  for (int i = 1; i < n; i++)
		  {
		    var top = stack.Peek();
		    
		    if (arr[i][0] > top[1])
		    {
		      stack.Push(arr[i]);
		    }
		    else
		    {
		      if (arr[i][1] > top[1])
		      {
		        top = stack.Pop();
		        top[1] = arr[i][1];
		        stack.Push(top);
		      }
		    }
		  }
		  
		  var result = stack.ToArray(); 
		  
		  Array.Reverse(result);
		  
		  return result;
		}
	}
}