|
| 1 | +--- |
| 2 | +comments: true |
| 3 | +difficulty: 中等 |
| 4 | +edit_url: https://github.com/doocs/leetcode/edit/main/solution/3400-3499/3478.Choose%20K%20Elements%20With%20Maximum%20Sum/README.md |
| 5 | +--- |
| 6 | + |
| 7 | +<!-- problem:start --> |
| 8 | + |
| 9 | +# [3478. 选出和最大的 K 个元素](https://leetcode.cn/problems/choose-k-elements-with-maximum-sum) |
| 10 | + |
| 11 | +[English Version](/solution/3400-3499/3478.Choose%20K%20Elements%20With%20Maximum%20Sum/README_EN.md) |
| 12 | + |
| 13 | +## 题目描述 |
| 14 | + |
| 15 | +<!-- description:start --> |
| 16 | + |
| 17 | +<p>给你两个整数数组,<code>nums1</code> 和 <code>nums2</code>,长度均为 <code>n</code>,以及一个正整数 <code>k</code> 。</p> |
| 18 | + |
| 19 | +<p>对从 <code>0</code> 到 <code>n - 1</code> 每个下标 <code>i</code> ,执行下述操作:</p> |
| 20 | + |
| 21 | +<ul> |
| 22 | + <li>找出所有满足 <code>nums1[j]</code> 小于 <code>nums1[i]</code> 的下标 <code>j</code> 。</li> |
| 23 | + <li>从这些下标对应的 <code>nums2[j]</code> 中选出 <strong>至多</strong> <code>k</code> 个,并 <strong>最大化</strong> 这些值的总和作为结果。</li> |
| 24 | +</ul> |
| 25 | + |
| 26 | +<p>返回一个长度为 <code>n</code> 的数组 <code>answer</code> ,其中 <code>answer[i]</code> 表示对应下标 <code>i</code> 的结果。</p> |
| 27 | + |
| 28 | +<p> </p> |
| 29 | + |
| 30 | +<p><strong class="example">示例 1:</strong></p> |
| 31 | + |
| 32 | +<div class="example-block"> |
| 33 | +<p><strong>输入:</strong><span class="example-io">nums1 = [4,2,1,5,3], nums2 = [10,20,30,40,50], k = 2</span></p> |
| 34 | + |
| 35 | +<p><strong>输出:</strong><span class="example-io">[80,30,0,80,50]</span></p> |
| 36 | + |
| 37 | +<p><strong>解释:</strong></p> |
| 38 | + |
| 39 | +<ul> |
| 40 | + <li>对于 <code>i = 0</code> :满足 <code>nums1[j] < nums1[0]</code> 的下标为 <code>[1, 2, 4]</code> ,选出其中值最大的两个,结果为 <code>50 + 30 = 80</code> 。</li> |
| 41 | + <li>对于 <code>i = 1</code> :满足 <code>nums1[j] < nums1[1]</code> 的下标为 <code>[2]</code> ,只能选择这个值,结果为 <code>30</code> 。</li> |
| 42 | + <li>对于 <code>i = 2</code> :不存在满足 <code>nums1[j] < nums1[2]</code> 的下标,结果为 <code>0</code> 。</li> |
| 43 | + <li>对于 <code>i = 3</code> :满足 <code>nums1[j] < nums1[3]</code> 的下标为 <code>[0, 1, 2, 4]</code> ,选出其中值最大的两个,结果为 <code>50 + 30 = 80</code> 。</li> |
| 44 | + <li>对于 <code>i = 4</code> :满足 <code>nums1[j] < nums1[4]</code> 的下标为 <code>[1, 2]</code> ,选出其中值最大的两个,结果为 <code>30 + 20 = 50</code> 。</li> |
| 45 | +</ul> |
| 46 | +</div> |
| 47 | + |
| 48 | +<p><strong class="example">示例 2:</strong></p> |
| 49 | + |
| 50 | +<div class="example-block"> |
| 51 | +<p><strong>输入:</strong><span class="example-io">nums1 = [2,2,2,2], nums2 = [3,1,2,3], k = 1</span></p> |
| 52 | + |
| 53 | +<p><strong>输出:</strong><span class="example-io">[0,0,0,0]</span></p> |
| 54 | + |
| 55 | +<p><strong>解释:</strong>由于 <code>nums1</code> 中的所有元素相等,不存在满足条件 <code>nums1[j] < nums1[i]</code>,所有位置的结果都是 0 。</p> |
| 56 | +</div> |
| 57 | + |
| 58 | +<p> </p> |
| 59 | + |
| 60 | +<p><strong>提示:</strong></p> |
| 61 | + |
| 62 | +<ul> |
| 63 | + <li><code>n == nums1.length == nums2.length</code></li> |
| 64 | + <li><code>1 <= n <= 10<sup>5</sup></code></li> |
| 65 | + <li><code>1 <= nums1[i], nums2[i] <= 10<sup>6</sup></code></li> |
| 66 | + <li><code>1 <= k <= n</code></li> |
| 67 | +</ul> |
| 68 | + |
| 69 | +<!-- description:end --> |
| 70 | + |
| 71 | +## 解法 |
| 72 | + |
| 73 | +<!-- solution:start --> |
| 74 | + |
| 75 | +### 方法一 |
| 76 | + |
| 77 | +<!-- tabs:start --> |
| 78 | + |
| 79 | +#### Python3 |
| 80 | + |
| 81 | +```python |
| 82 | + |
| 83 | +``` |
| 84 | + |
| 85 | +#### Java |
| 86 | + |
| 87 | +```java |
| 88 | + |
| 89 | +``` |
| 90 | + |
| 91 | +#### C++ |
| 92 | + |
| 93 | +```cpp |
| 94 | + |
| 95 | +``` |
| 96 | + |
| 97 | +#### Go |
| 98 | + |
| 99 | +```go |
| 100 | + |
| 101 | +``` |
| 102 | + |
| 103 | +<!-- tabs:end --> |
| 104 | + |
| 105 | +<!-- solution:end --> |
| 106 | + |
| 107 | +<!-- problem:end --> |
0 commit comments