今日中等题,没做出来,先mark一下:https://leetcode-cn.com/problems/merge-intervals/
四次错误提交,先讲讲思路错在哪了吧,明天继续。
首先题目样例让我误以为,给的数组已经是排好序的了,所以没有做排序。
其次,对于数组长度没有判空。
再次,遍历数组时因为要和相邻数组做对比,下标不注意经常会越界。
最后,只关注了相邻对比,没有关注区间,所以我的左右指针其实是假的,没有起到应有作用。
错误答案,仅用来记录,不要参考:
class Solution {
public int[][] merge(int[][] intervals) {
int[][] ans = new int[intervals.length][2];
int j=0;
int len = intervals.length;
Arrays.sort(intervals, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] - o2[0];
}
});
for(int i=0;i<len;i++) {
int left = i;
int right = i==len-1?i:i+1;
while(i<len-1 && (intervals[left][1]>=intervals[i+1][0] && intervals[left][1]>=intervals[i+1][1])) {
right = intervals[left][1]>=intervals[i+1][1] ? left : i+1;
i++;
}
ans[j][0] = intervals[left][0];
ans[j][1] = intervals[right][1];
j++;
}
return Arrays.copyOf(ans,j);
}
}
网友评论