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