Java如何修复「error: incompatible types: List无法转换为int[]」错误
解决LeetCode 57题《Insert Interval》中的Java代码错误
错误原因分析
你遇到的「error: incompatible types: List cannot be converted to int[]」错误,核心问题在于:
res是List<int[]>类型,它的add()方法只能接受单个int[]元素;- 而
subArray是List<int[]>类型,直接用res.add(subArray)相当于试图把整个列表作为一个元素插入,类型完全不匹配。
另外你的代码还有两个逻辑问题:
- 插入新区间的条件判断错误:应该是
newInterval[1] < intervals[i][0](新区间的结束早于当前区间的开始,才说明新区间在当前区间之前,无需重叠合并),而不是newInterval[1] < intervals[i][1]; - 提前返回时直接返回
res,但方法要求返回int[][]类型,需要转成数组。
修正后的代码
class Solution { public int[][] insert(int[][] intervals, int[] newInterval) { List<int[]> res = new ArrayList<>(); for (int i = 0; i < intervals.length; i++) { // 新区间在当前区间之前,无重叠,插入新区间后添加剩余所有区间并返回 if (newInterval[1] < intervals[i][0]) { res.add(newInterval); // 使用addAll批量添加子列表的所有元素,而非add单个列表 res.addAll(Arrays.asList(intervals).subList(i, intervals.length)); return res.toArray(new int[res.size()][]); } else if (newInterval[0] > intervals[i][1]) { // 新区间在当前区间之后,无重叠,直接添加当前区间 res.add(intervals[i]); } else { // 有重叠,合并区间 newInterval[0] = Math.min(intervals[i][0], newInterval[0]); newInterval[1] = Math.max(intervals[i][1], newInterval[1]); } } // 循环结束后,说明新区间在所有区间之后,直接添加 res.add(newInterval); return res.toArray(new int[res.size()][]); } }
关键修改点
- 把
res.add(subArray)替换为res.addAll(subArray):addAll()方法会将子列表中的每个int[]元素逐个添加到res中,符合类型要求; - 修正插入条件为
newInterval[1] < intervals[i][0],确保逻辑正确; - 提前返回时调用
res.toArray(new int[res.size()][]),将List转换为方法要求的int[][]类型。
内容的提问来源于stack exchange,提问作者PrimeTimeTran
相关产品推荐
相关产品推荐

