Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- sourcetree
- ReactiveProgramming
- Database
- library
- Algorithm
- ViewModel
- Java
- Java8
- livedata
- Android
- Jetpack
- rxjava
- leetcode
- IntelliJ
- Version
- git
- Room
- Kotlin
- homebrew
- github
- FRAGMENT
- androidstudio
- programmers
Archives
- Today
- Total
Learn & Run
[LeetCode] Insert Interval (Java) 본문
leetcode.com/problems/insert-interval/
번역 : 겹치지 않는 간격에 대한 입력값이 주어지면 간격에 새 간격을 삽입합니다 (필요한 경우 병합). 간격이 처음에 시작 시간에 따라 정렬되었다고 가정 할 수 있습니다.
1. 접근 아이디어
- 반복문을 돌면서 intervals 배열의 첫 번째 값과 두 번째 값을 비교하면서 list에 저장합니다.
- newInterval값이 intervals 배열과의 비교에서 사용되었는지 판별하기 위해 isAvaliable 변수를 이용합니다.
- 작성한 알고리즘에서는 newInterval값이 비교되지 않고도 끝날 수 있기 때문에 list에 추가후 배열의 첫 번째 원소를 기준으로 재정렬합니다.
2. 소스 코드
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
if(intervals.length == 0) return new int[][] { newInterval }; //Edge case
List<int[]> list = new ArrayList<>();
boolean isAvailable = true;
for(int i=0; i<intervals.length; i++) {
int[] nowInterval = intervals[i];
if(!isAvailable) {
list.add(nowInterval);
continue;
}
if(nowInterval[0] > newInterval[1]) {
list.add(nowInterval);
continue;
}
if(nowInterval[1] < newInterval[0]) list.add(nowInterval);
else { //nowInterval[1] >= newInterval[0]
isAvailable = false;
int tempLeft = Math.min(nowInterval[0], newInterval[0]);
int tempRight = Math.max(nowInterval[1], newInterval[1]);
for(int j=i+1; j<intervals.length; j++) {
i++;
int[] nextInterval = intervals[j];
if(nextInterval[0] > tempRight) {
i--;
break;
}
else tempRight = Math.max(tempRight, nextInterval[1]);
}
list.add(new int[] { tempLeft, tempRight });
}
}
if(isAvailable) {
list.add(newInterval);
}
int[][] result = list.toArray(new int[][]{new int[list.size()]});
Arrays.sort(result, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] - o2[0];
}
});
return result;
}
}
'Algorithm > Leetcode' 카테고리의 다른 글
[LeetCode] Multiply Strings (Java) (0) | 2021.01.20 |
---|---|
[LeetCode] Find First and Last Position of Element in Sorted Array (Java) (0) | 2021.01.07 |
[LeetCode] Group Anagrams (Java) (0) | 2021.01.07 |
[LeetCode] First Missing Positive (Java) (0) | 2020.10.20 |
[LeetCode] Trapping Rain Water (Java) (0) | 2020.10.13 |