在 X軸 上有一些獎品。給你一個整數陣列 prizePositions
,它按照 非遞減 順序排列,其中 prizePositions[i]
是第 i
件獎品的位置。數軸上一個位置可能會有多件獎品。再給你一個整數 k
。
你可以同時選擇兩個端點為整數的線段。每個線段的長度都必須是 k
。你可以獲得位置在任一線段上的所有獎品(包括線段的兩個端點)。注意,兩個線段可能會有相交。
- 比方說
k = 2
,你可以選擇線段[1, 3]
和[2, 4]
,你可以獲得滿足1 <= prizePositions[i] <= 3
或者2 <= prizePositions[i] <= 4
的所有獎品 i 。
請你返回在選擇兩個最優線段的前提下,可以獲得的 最多 獎品數目。
class Solution { public: int maximizeWin(vector<int>& prizePositions, int k) { int n = prizePositions.size(); if (k * 2 + 1 >= prizePositions[n - 1] - prizePositions[0]) { return n; } int ans = 0, left = 0; vector<int> mx(n + 1); for (int right = 0; right < n; right++) { while (prizePositions[right] - prizePositions[left] > k) { left++; } ans = max(ans, mx[left] + right - left + 1); mx[right + 1] = max(mx[right], right - left + 1); } return ans; } };
複製的明天再看