前往
大廳
主題

LeetCode - 2542. Maximum Subsequence Score 解題心得

Not In My Back Yard | 2023-12-26 12:00:04 | 巴幣 100 | 人氣 107

題目連結:


題目意譯:
你被給定兩個索引值從 0 開始且長度皆為 n 的整數陣列 nums1 和 nums2,以及一個正整數 k。你必須從 nums1 之中選出一個長度 k 的索引值子序列。

對於選定的索引值 i0, i1, ……, ik-1,你的分數將定義為:
nums1 中被選出之元素的總和乘以 nums2 被選出之元素的最小值。
其可以簡單地被定義成:(nums1[i0] + nums1[i1] + …… + nums1[ik - 1]) × min(nums2[i0] , nums2[i1], …… ,nums2[ik - 1])。

回傳最大可能的分數值。

一個陣列中的一個索引值之子序列為可以從集合 {0, 1, ……, n-1} 刪除零個或若干個元素而得到的一個集合。

限制:
n == nums1.length == nums2.length
1 ≦ n ≦ 10 ^ 5
0 ≦ nums1[i], nums2[j] ≦ 10 ^ 5
1 ≦ k ≦ n



範例測資:
範例 1:
輸入: nums1 = [1,3,3,2], nums2 = [2,1,3,4], k = 3
輸出: 12
解釋:
四個可能的子序列分數為:
- 我們選擇索引值 0 、 1 和 2,其分數值 = (1+3+3) × min(2,1,3) = 7。
- 我們選擇索引值 0 、 1 和 3,其分數值 = (1+3+2) × min(2,1,4) = 6。
- 我們選擇索引值 0 、 2 和 3,其分數值 = (1+3+2) × min(2,3,4) = 12。
- 我們選擇索引值 1 、 2 和 3,其分數值 = (3+3+2) × min(1,3,4) = 8。
因此我們回傳最大分數值,其為 12。

範例 2:
輸入: nums1 = [4,2,3,1,1], nums2 = [7,5,10,9,6], k = 1
輸出: 30
解釋:
選擇索引值 2 是最佳的:nums1[2] × nums2[2] = 3 × 10 = 30 是最大可能的分數值。


解題思維:
這題幾乎一模一樣,只是把幾個名詞換掉(本題的 nums1 是該題的「速度」、nums2 是「效率」、分數是「效能」,而索引值對應著「員工的編號」)再加上本題固定挑 k 個索引值(也就是一旦挑滿 k 個才能計算分數值),僅此而已。



題外話:不知道為何該題被標記為「Hard」,但本題是「Medium」。雖然這似乎也不是第一次在 Leetcode 上發生了。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作