目錄
一、題目內容
二、解題思路
三、**
有乙個整數陣列 nums ,和乙個查詢陣列 requests ,其中 requests[i] = [starti, endi] 。第 i 個查詢求 nums[starti] + nums[starti + 1] + ... + nums[endi - 1] + nums[endi] 的結果 ,starti 和 endi 陣列索引都是 從 0 開始 的。你可以任意排列 nums 中的數字,請你返回所有查詢結果之和的最大值。
由於答案可能會很大,請你將它對 10^9 + 7 取餘 後返回。
示例 1:輸入:nums = [1,2,3,4,5], requests = [[1,3],[0,1]]
輸出:19
解釋:乙個可行的 nums 排列為 [2,1,3,4,5],並有如下結果:
requests[0] -> nums[1] + nums[2] + nums[3] = 1 + 3 + 4 = 8
requests[1] -> nums[0] + nums[1] = 2 + 1 = 3
總和為:8 + 3 = 11。
乙個總和更大的排列為 [3,5,4,2,1],並有如下結果:
requests[0] -> nums[1] + nums[2] + nums[3] = 5 + 4 + 2 = 11
requests[1] -> nums[0] + nums[1] = 3 + 5 = 8
總和為: 11 + 8 = 19,這個方案是所有排列中查詢之和最大的結果。
示例 2:輸入:nums = [1,2,3,4,5,6], requests = [[0,1]]
輸出:11
解釋:乙個總和最大的排列為 [6,5,4,3,2,1] ,查詢和為 [11]。
示例 3:
輸入:nums = [1,2,3,4,5,10], requests = [[0,2],[1,3],[1,1]]
輸出:47
解釋:乙個和最大的排列為 [4,10,5,3,2,1] ,查詢結果分別為 [19,18,10]。
n == nums.length
1 <= n <= 105
0 <= nums[i] <= 105
1 <= requests.length <= 105
requests[i].length == 2
0 <= starti <= endi < n
1.記錄requests中範圍內數字的使用次數,存入diff中。
2.注意儲存次數的方式不能暴力的雙重for,否則導致超時。
3.利用射線傳遞和截斷的思想,每次都將自己是否作為起點或終點的數量與前乙個數字在
requests
中各個範圍中
包含個數相加,得到自己的使用次數。
class solution:
def maxsumrangequery(self, nums: list, requests: list) -> int:
n = len(nums)
diff = [0] * n
for s, e in requests:
diff[s] += 1
if e + 1 < n:
diff[e + 1] -= 1
for i in range(1, n):
diff[i] += diff[i - 1]
nums.sort()
diff.sort()
ans = 0
for i in range(n):
ans += nums[i] * diff[i]
return ans % (10 ** 9 + 7)
if __name__ == '__main__':
nums = [1, 2, 3, 4, 5]
requests = [[1, 3], [0, 1]]
s = solution()
ans = s.maxsumrangequery(nums, requests)
print(ans)
988 211所有學校
console 命令列 function removetablerow rowlist,rownum var ptn211 new regexp 清華大學 北京大學 中國人民大學 北京工業大學 北京理工大學 北京航空航天大學 北京化工大學 北京郵電大學 對外經濟 大學 中國傳媒大學 民族大學 中國礦...
Leetcode 797 所有可能的路徑 C
給乙個有 n 個結點的有向無環圖,找到所有從 0 到 n 1 的路徑並輸出 不要求按順序 輸入 1,2 3 3 輸出 0,1,3 0,2,3 解釋 圖是這樣的 0 1 v v 2 3 這有兩條路 0 1 3 和 0 2 3.dfs深搜回溯,從節點0開始遍歷,終點為n 1。詳細過程見 vectorin...
LeetCode 1588 所有奇數長度子陣列的和
給你乙個正整數陣列 arr 請你計算所有可能的奇數長度子陣列的和。子陣列 定義為原陣列中的乙個連續子串行。請你返回 arr 中 所有奇數長度子陣列的和 輸入 arr 1,4,2,5,3 輸出 58 解釋 所有奇數長度子陣列和它們的和為 1 1 4 4 2 2 5 5 3 3 1,4,2 7 4,2,...