Leetcode Java Next Greater Element I
업데이트:
문제
코드
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
Map<Integer, Integer> map = new HashMap<>();
for (int idx = 0; idx < nums2.length; idx++) {
map.put(nums2[idx], idx);
}
for (int idx = 0; idx < nums1.length; idx++) {
nums1[idx] = this.findNextGreaterElement(nums2, map.get(nums1[idx]));
}
return nums1;
}
private int findNextGreaterElement(int[] nums2, int index) {
int num = nums2[index];
for (int idx = index + 1; idx < nums2.length; idx++) {
if (nums2[idx] > num) {
return nums2[idx];
}
}
return -1;
}
}
결과
설명
- nums1 내 각 요소들의 값을 nums2에서 찾아 해당 값의 우측에서 가장 가까우면서 현재 값보다 큰 값을 검색하고, 검색한 값들을 nums1의 순서대로 반환하는 문제이다.
- 단, 요소의 값보다 큰 값이 우측에 존재하지 않는 경우 -1을 해당 자리에 넣는다.
-
nums2 내 각 값의 위치를 저장하기 위한 map을 HashMap으로 초기화하고, nums를 반복하여 값을 key에 위치 값은 value로 넣어준다.
- nums1의 모든 요소를 반복하여 아래를 수행한다.
- nums1의 idx번째 자리에 4번에서 정의한 findNextGreaterElement(int[] nums2, int index) 메서드를 nums1의 idx번째 값을 map에서 nums2 내 위치 값을 찾은 후 index에 넣어 수행한 결과를 넣어 값을 교환해준다.
- nums2 배열 내 index번째 값보다 큰 index 이후의 값을 찾는 findNextGreaterElement(int[] nums2, int index) 메서드를 정의한다.
- num에 nums2의 index번째 값을 넣어준다.
- $index + 1$부터 nums2의 길이 미만까지 idx를 증가시키며 탐색을 수행한다.
- nums2의 idx번째 값이 num보다 큰 경우, nums2의 idx번째 값을 반환한다.
- 반복이 종료되면 num보다 큰 값이 우측에 없으므로, -1을 반환한다.
- 3번의 반복이 완료되면 문제 풀이대로 변환된 값을 가진 nums1을 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기