C#中对于list的取值,直接使用:list[i]
1. 题目描述
2. 题目分析
- intervals 代表初始的区间,newInterval 代表了想要插入的区间
- 如果 intervals 的左边界大于 newInterval[1]:
list.Add(new int[] { intervals[i][0], intervals[i][1] });
- 如果 intervals 的右边界小于 newInterval[0]:
list.Add(new int[] { intervals[i][0], intervals[i][1] });
- 如果intervals的左右边界和newInterval有交集:
left = Math.Min(left, intervals[i][0]);
right = Math.Max(right, intervals[i][1]);
- 什么时候需要把 [left,right] 加入 list 中呢?当我们 intervals 的左边界大于 newInterval[1] 时,需要进行加入并且用标记位flag进行标记
- 如果,最后的标记位为false,也就是我们的 [left,right] 没有被加入 list 中,需要执行
list.Add(new int[] { left, right });
- 最后返回
return list.ToArray();
3. 题目代码
public int[][] Insert(int[][] intervals, int[] newInterval) { int left = newInterval[0]; int right = newInterval[1]; List<int[]> list = new List<int[]>(); bool flag = false; for (int i = 0; i < intervals.Length; i++) { if (intervals[i][0] > right) { if (!flag) { flag = true; list.Add(new int[] { left, right }); } list.Add(new int[] { intervals[i][0], intervals[i][1] }); } else if (intervals[i][1] < left) { list.Add(new int[] { intervals[i][0], intervals[i][1] }); } else { left = Math.Min(left, intervals[i][0]); right = Math.Max(right, intervals[i][1]); } } if (!flag) { list.Add(new int[] { left, right }); } return list.ToArray(); }