30 插入區間

2021-09-25 19:25:17 字數 2606 閱讀 4583

題目描述:

給出乙個無重疊的 ,按照區間起始端點排序的區間列表。

在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊(如果有必要的話,可以合併區間)。

示例 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 無直接將數從小到大存到陣列,接...