Leetcode Java Largest Values From Labels
업데이트:
문제
코드
class Solution {
public int largestValsFromLabels(int[] values, int[] labels, int numWanted, int useLimit) {
int length = values.length;
int[][] nums = new int[length][2];
for (int i = 0; i < length; i++) {
nums[i][0] = values[i];
nums[i][1] = labels[i];
}
Arrays.sort(nums, (a, b) -> b[0] - a[0]);
int result = 0;
int[] count = new int[20001];
for (int[] num : nums) {
if (count[num[1]] < useLimit) {
count[num[1]]++;
numWanted--;
result += num[0];
}
if (numWanted == 0) {
break;
}
}
return result;
}
}
결과
설명
- 아래의 조건을 만족하는 부분 집합의 최대 점수를 반환하는 문제이다.
- labels의 i번째 요소의 values[i]이다.
- 부분 집합의 크기가 numWanted보다 작거나 같다.
- n개의 요소로 구성된 부분 집합인 s는 useLimit개만큼 동일한 숫자가 포함될 수 있다.
- 문제 풀이에 필요한 변수를 정의한다.
- length는 values의 길이를 저장한 변수이다.
- nums는 labels와 values를 엮기 위한 배열로, $length \times 2$ 크기의 2차원 정수 배열로 초기화하여 nums[i]에 [values[i], labels[i]]를 넣어준 후 값 기준으로 내림차순 정렬한다..
- result는 결과를 저장할 변수로 0으로 초기화한다.
- count는 값의 갯수를 저장할 변수로, 값의 최대 상한선인 $10^4$보다 1 큰 크기의 정수 배열로 초기화한다.
- nums의 값을 순차적으로 num에 넣어 아래를 수행한다.
- count[num[1]]의 값이 useLimit보다 작은 경우, 아래를 수행한다.
- count[num[1]]를 증가시켜 사용한 갯수를 증가시키고, numWanted 값을 감소시켜 갯수를 차감한다.
- result에 num[0]인 값을 더해준다.
- numWanted가 0인 최대 가능한 부분 집합의 갯수를 채운 경우, 반복을 종료한다.
- count[num[1]]의 값이 useLimit보다 작은 경우, 아래를 수행한다.
- 위의 반복을 통해 최대 점수가 계산된 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기