Leetcode Java Non-decreasing Array
업데이트:
문제
코드
class Solution {
public boolean checkPossibility(int[] nums) {
int count = 0;
for (int idx = 1; idx < nums.length && count <= 1; idx++) {
if (nums[idx - 1] > nums[idx]) {
count++;
if (idx - 2 < 0 || nums[idx - 2] <= nums[idx]) {
nums[idx - 1] = nums[idx];
} else {
nums[idx] = nums[idx - 1];
}
}
}
return count <= 1;
}
}
결과
설명
- nums의 값을 최대 하나만 수정하여 감소하지 않는 배열을 만들 수 있는지 검증하는 문제이다.
- 0 <= i <= $n - 2$ 처럼 모든 i에 대해 num[i] <= nums[$i + 1$]이 유지되는 경우 배열이 감소하지 않는 배열이라고 한다.
-
count는 수정 횟수를 계산할 변수로, 0으로 초기화한다.
- 1부터 nums의 길이 미만이고 count가 1 이하일 때 까지 idx를 증가시키며 아래를 반복한다.
- nums의 $idx - 1$번째 값이 idx보다 큰 경우, 값을 수정해야하므로 아래를 수행한다.
- 수정 횟수인 count를 증가시킨다.
- $idx - 2$가 0보다 작거나 nums의 $idx - 2$번째 값이 idx번째 값과 같거나 작은 경우, nums의 $idx - 1$ 위치에 idx번째 값을 넣어준다.
- 위의 경우가 아니라면, nums의 idx번째 위치에 $idx - 1$번째 값을 넣어준다.
- nums의 $idx - 1$번째 값이 idx보다 큰 경우, 값을 수정해야하므로 아래를 수행한다.
- 반복이 완료되면 수정 횟수가 1 이하인지 검증한 결과를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기