題目描述:
給出乙個無重疊的 ,按照區間起始端點排序的區間列表。
在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊(如果有必要的話,可以合併區間)。
示例 1:
輸入: intervals = [[1,3],[6,9]], newinterval = [2,5]
輸出: [[1,5],[6,9]]
示例 2:
輸入: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newinterval = [4,8]
輸出: [[1,2],[3,10],[12,16]]
解釋: 這是因為新的區間 [4,8] 與 [3,5],[6,7],[8,10] 重疊。
本想的是把每個點儲存起來,然後放入,但是超時。。。
class solution
list.add(newinterval);
int result = new int[list.size()][2];
for (int i = 0; i < result.length; i++)
arrays.sort(result, new comparator()
});return result;
} setset = new hashset();
for (int integer : intervals)
if(temstart == temend)
} // 加入新增的區間
for (int i = newinterval[0]; i < newinterval[1]; i++)
start = math.min(newinterval[0], start);
end = math.max(end, newinterval[1]);
system.out.println(set);
for (int i = start; i < end; i++)
temshuzu[0] = tem;
tem = i;
while (set.remove(tem + 1))
temshuzu[1] = tem + 1;
list.add(temshuzu);
}} int result = new int[list.size()][2];
for (int i = 0; i < result.length; i++)
arrays.sort(result, new comparator()
});return result;
}}
使用二分查詢法
思路是先找到要插入的地方,然後向後合併,再向前合併
class solution ;
} // 二分查詢找到最後乙個intervals[i][0]小於newinterval[0]的位置
int index = searchlastlessthan(intervals, newinterval);
arraylistlist = new arraylist<>();
// newinterval插入到頭部
if (index < 0) );
} else );
}// 將newinterval插入
int inter = list.get(list.size() - 1);
if (inter[1] < newinterval[0]) );
} else
} // 合併後半部分
for (int i = index + 1; i < intervals.length; i++) );
} else
} // 轉換結果返回
int res = new int[list.size()][2];
for (int i = 0; i < list.size(); i++)
return res;
} private int searchlastlessthan(int intervals, int newinterval) else
left = mid + 1;
}} return res;
}}
或者借鑑這個思路
public int insert(int intervals, int newinterval)
//如果到最後都沒找到,把newinterval加到最後
if(i == n)
//選擇小的 作為新區的 start
nstart = math.min(intervals[i][0],newinterval[0]);
//如果當前的start < end 把當前end 和 newinterval的end 比較
while(i < n && intervals[i][0] <= newinterval[1])
res.add(new int);
//如果後面有沒遍歷到的 加入最後的結果
while(i < n)
for(int x : res)
return res.toarray(new int[0]);
}
30 插入區間
是insert 3,4 into 1,2 5,9 we get 1,2 3,4 5,9 注意區間可能落在,已存在元素的範圍內,例如 3,7 插入 1,2 5,9 我開始的 思路不太流暢,這個思路相對清晰,先修改要插入的元素的start end 最後統一刪除容器中需要刪除的元素。definition ...
30 插入區間
原題 給出乙個無重疊的按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 您在真實的面試中是否遇到過這個題?yes樣例插入區間 2,5 到 1,2 5,9 我們得到 1,9 插入區間 3,4 到 1,2 5,9 我們得到 1,...
LintCode 30 插入區間
給出乙個無重疊的按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 插入區間 2,5 到 1,2 5,9 我們得到 1,9 插入區間 3,4 到 1,2 5,9 我們得到 1,2 3,4 5,9 無直接將數從小到大存到陣列,接...