Skip to content

Commit d31e2ce

Browse files
solves find subsequence of length k with the largest sum
1 parent a35ec77 commit d31e2ce

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,5 +497,5 @@
497497
| 2085 | [Count Common Words With One Occurrence](https://leetcode.com/problems/count-common-words-with-one-occurrence) | [![Java](assets/java.png)](src/CountCommonWordsWithOneOccurrence.java) | |
498498
| 2089 | [Find Target Indices After Sorting Array](https://leetcode.com/problems/find-target-indices-after-sorting-array) | [![Java](assets/java.png)](src/FindTargetIndicesAfterSortingArray.java) | |
499499
| 2094 | [Finding 3-Digit Even Numbers](https://leetcode.com/problems/finding-3-digit-even-numbers) | [![Java](assets/java.png)](src/Finding3DigitEvenNumbers.java) | |
500-
| 2099 | [Find Subsequence of Length K With the Largest Sum](https://leetcode.com/problems/find-subsequence-of-length-k-with-the-largest-sum) | | |
500+
| 2099 | [Find Subsequence of Length K With the Largest Sum](https://leetcode.com/problems/find-subsequence-of-length-k-with-the-largest-sum) | [![Java](assets/java.png)](src/FindSubsequenceOfLengthKWithTheLargestSum.java) | |
501501
| 2103 | [Rings and Rods](https://leetcode.com/problems/rings-and-rods) | | |
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// https://leetcode.com/problems/find-subsequence-of-length-k-with-the-largest-sum
2+
// T: O(nloogn + klogk)
3+
// S: o(n)
4+
5+
import java.util.ArrayList;
6+
import java.util.Comparator;
7+
import java.util.List;
8+
9+
public class FindSubsequenceOfLengthKWithTheLargestSum {
10+
public int[] maxSubsequence(int[] nums, int k) {
11+
List<Number>numbers = toNumbersList(nums);
12+
numbers.sort(Comparator.comparingInt(a -> a.value));
13+
List<Number> topK = getLastK(numbers, k);
14+
topK.sort(Comparator.comparing(a -> a.index));
15+
return toArray(topK);
16+
}
17+
18+
private List<Number> toNumbersList(int[] array) {
19+
final List<Number> numbers = new ArrayList<>(array.length);
20+
for (int index = 0 ; index < array.length ; index++) {
21+
numbers.add(new Number(array[index], index));
22+
}
23+
return numbers;
24+
}
25+
26+
private List<Number> getLastK(List<Number> numbers, int k) {
27+
final List<Number> result = new ArrayList<>();
28+
for (int i = 0 ; i < k ; i++) {
29+
result.add(numbers.get(numbers.size() - 1 - i));
30+
}
31+
return result;
32+
}
33+
34+
private int[] toArray(List<Number> numbers) {
35+
final int[] array = new int[numbers.size()];
36+
for (int i = 0 ; i < array.length ; i++) {
37+
array[i] = numbers.get(i).value;
38+
}
39+
return array;
40+
}
41+
42+
private static final class Number {
43+
private final int value;
44+
private final int index;
45+
46+
private Number(int value, int index) {
47+
this.value = value;
48+
this.index = index;
49+
}
50+
}
51+
}

0 commit comments

Comments
 (0)