Algorithm to calculate number of intersecting discs

前端 未结 30 1497
鱼传尺愫
鱼传尺愫 2020-12-12 10:57

Given an array A of N integers we draw N discs in a 2D plane, such that i-th disc has center in (0,i) and a radius

30条回答
  •  一生所求
    2020-12-12 11:35

    This got 100/100 in c#

    class CodilityDemo3
    {
    
        public static int GetIntersections(int[] A)
        {
            if (A == null)
            {
                return 0;
            }
    
            int size = A.Length;
    
            if (size <= 1)
            {
                return 0;
            }
    
            List lines = new List();
    
            for (int i = 0; i < size; i++)
            {
                if (A[i] >= 0)
                {
                    lines.Add(new Line(i - A[i], i + A[i]));
                }
            }
    
            lines.Sort(Line.CompareLines);
            size = lines.Count;
            int intersects = 0;
    
            for (int i = 0; i < size; i++)
            {
                Line ln1 = lines[i];
                for (int j = i + 1; j < size; j++)
                {
                    Line ln2 = lines[j];
                    if (ln2.YStart <= ln1.YEnd)
                    {
                        intersects += 1;
                        if (intersects > 10000000)
                        {
                            return -1;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
            }
    
            return intersects;
        }
    
    }
    
    public class Line
    {
        public Line(double ystart, double yend)
        {
            YStart = ystart;
            YEnd = yend;
        }
        public double YStart { get; set; }
        public double YEnd { get; set; }
    
        public static int CompareLines(Line line1, Line line2)
        {
            return (line1.YStart.CompareTo(line2.YStart));
    
        }
    }
    

    }

提交回复
热议问题