題目連結:
題目意譯:
你被給定兩個索引值從 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 上發生了。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。