九章演算法 深信服面試題 最大線段覆蓋

2021-10-19 23:39:46 字數 1243 閱讀 9665

描述

在乙個數軸上給出n個線段,問選擇不超過k個線段,使得這k個線段覆蓋的數最多。

lintcode 領扣

樣例1

input:

[(1,2),(2,3),(3,4)]

2 output: 4

explanation:

select the line segment (1,2), (3,4), which can cover the 4 numbers of 1,2,3,4.

樣例2

input:

[(1,2),(2,3),(1,7)]

2 output: 7

explanation:

selecting the line segment (1,7) ,which can cover the 7 numbers of 1,2,3,4,5,6,7.

題解

dp[i][j]dp[i][j]表示用jj個線段覆蓋前ii個數的最優答案。先將所有線段按照左端點排序,對於左端點相同的線段,取最長的拿來轉移。 則有: dp[i+1][j]=max(dp[i][j],dp[i+1][j])dp[i+1][j]=max(dp[i][j],dp[i+1][j]) dp[i+num][j+1]=max(dp[i][j]+num,dp[i+num][j+1])dp[i+num][j+1]=max(dp[i][j]+num,dp[i+num][j+1])(num為線段長度)

/**

* definition of interval:

* public classs interval

* }

*/ public class solution

return a.start - b.start;

} }

public int maximumlinecoverage(listintervals, int k)

for (int i = 0; i < maxnum; i++)

for (int j = 0; j <= k; j++)

} if (num > 0)

} return dp[maxnum][k];

} }

更多題解參考:https://www.

九章演算法 Google面試題 內積

描述 給定長度為n的a陣列,長度為k的b陣列 你可以從a陣列裡取k個數 規則如下 即每次可以從a陣列的最左邊或者最右邊取走乙個數,取走的數從陣列中移除 將取出的ai按取出的順序組成c陣列 求b與c的內積最大值 b與c內積為 i 0k 1bi ci 解釋1 a 1,4,3,2,5 b 1,2,3,4 ...

九章演算法面試題27 最大連續子集

給乙個整數集合s,定義s的子集d為連續子集當且僅當d中的整數構成連續的整數序列。求s的最大連續子集,即包含連續整數最多的子集。如的最大連續子集為 下面給出乙個時空複雜度都是o n 的方法 使用hash表,索引當前找到的所有連續子集。對於每個集合,索引和,如 3 5 6 遍歷s的時候,假設遍歷到數k,...

九章演算法面試題32 小球排序

有紅黃藍三色的小球若干排成一列,這些小球進行排序,請使用盡量少的空間和時間。假設順序為紅色黃色藍色。用兩根指標從頭開始遍歷,第一根指標遇到非紅色時停下,如果第二根指標找到第一根指標之後的第乙個紅色停下,交換兩根指標所指顏色。重複上述過程。直到第二根指標找不到任何紅色。此時第一根指標到最後都是黃色或藍...