Leetcode Java Global and Local Inversions
업데이트:
문제
코드
class Solution {
public boolean isIdealPermutation(int[] nums) {
int max = 0;
for (int idx = 0; idx < nums.length - 2; idx++) {
max = Math.max(max, nums[idx]);
if (max > nums[idx + 2]) {
return false;
}
}
return true;
}
}
결과
설명
- [0, n - 1] 범위의 값을 담은 num를 이용하여 아래의 규칙대로 수행되는 Global Inversions의 수와 Local Inversions의 수가 동일한지 검증하는 문제이다.
- Global Inversions의 수는 아래의 조건을 만족하는 (i, j)의 다른 쌍의 수이다.
- 0 <= i < j < n
- nums[i] > nums[j]
- Local Inversions의 수는 아래의 조건을 만족하는 인덱스 i의 수이다.
- 0 <= i < n - 1
- nums[i] > nums[i + 1]
- Global Inversions의 수는 아래의 조건을 만족하는 (i, j)의 다른 쌍의 수이다.
-
max는 가장 큰 값을 저장할 변수로, 0으로 초기화한다.
- 0부터 nums의 길이보다 2 작은 크기 미만으로 idx를 증가시키며 아래를 반복한다.
- max에 max와 nums의 idx번째 값 중 큰 값을 저장한다.
- max와 nums의 $idx + 2$번째 값 중 max가 큰 경우, 두 Inversions의 수가 다르므로 false를 반환한다.
- 모든 Local Inversions는 Global Inversions를 만족하므로, 두 수가 같다는 의미는 Global Inversions 또한 Local Inversions를 만족한다는 의미이다.
- 그렇기 때문에 $i + 2 <= j$일때 nums[i] > nums[j]를 찾을 수 없다는 의미가 된다.
- 즉, nums의 idx번째 값까지의 가장 큰 값이 $idx + 2$번째 값보다 크게되는 경우, 두 Inversions의 수가 다르게된다.
- 반복이 완료되면 두 Inversions의 수가 같으므로, true를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기