728x90
반응형
https://www.lintcode.com/problem/641/
1. 예외처리 필수
2. 범위설정이 중요하다.
-> 처음 / 중간 /끝
//배열이 존재하지 않을 때
list.add(makeRange(lower, upper));
//처음
list.add(makeRange(lower,nums[0]-1));
//중간
list.add(makeRange(nums[i]+1, nums[i+1]-1));
//끝
list.add(makeRange(nums[n-1]+1,upper));
3. 삼항 연산자 사용한 범위 생성 메서드 작성
private static String makeRange(int start, int end){
//return start==end ? Integer.toString(start) : (start+"->"+end);
return start==end? Integer.toString(start):(start+"->"+end);
}
-> 조건 ? 참 : 거짓
int를 String으로 변환하는 메서드들
-> String.valueOf()
->Integer.toString()
public class Solution {
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
//2개 이상 -> 로 표시
//그 외엔 ", "로 하나씩 추가
//예외처리 필수 -> 1개일 때 / 0개일 때 / 배열의 값이 같을 때
//0개일 때, 1개일 때 -> upper와 lower가 같을 때, 같지 않을 때
List<String> list = new ArrayList<>();
int n=nums.length;
//1. 배열이 존재하지 않거나, 배열의 길이가 0일 때 예외처리
if(nums==null || n==0){
list.add(makeRange(lower, upper));
return list;
}
//2. lower, upper 처리
//: 배열이 같을 때도 생각해야 한다.
//-> 범위생성 메서드를 사용
//lower처리
if(nums[0]>lower){
list.add(makeRange(lower,nums[0]-1));
}
//중간 처리
for(int i=0;i<n-1;i++){
//배열이 같은 경우 예외처리 && 다음 배열이 현재 배열 값과의 차이가 1이상일 경우만
if(nums[i]!=nums[i+1] && nums[i+1]>nums[i]+1)
list.add(makeRange(nums[i]+1, nums[i+1]-1));
}
//upper 처리
if(nums[n-1]<upper){
list.add(makeRange(nums[n-1]+1,upper));
}
return list;
}
private static String makeRange(int start, int end){
//return start==end ? Integer.toString(start) : (start+"->"+end);
return start==end? Integer.toString(start):(start+"->"+end);
}
}
public class Solution {
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
//모든 요소를 포함하는 범위
//정수 배열
List<String> list = new ArrayList<>();
int n=nums.length;
//1. 예외처리
if(nums==null || n==0){
list.add(makeRange(lower, upper));
return list;
}
//2. 처음, 중간, 끝 범위 설정
if(lower<nums[0]){
list.add(makeRange(lower, nums[0]-1));
}
for(int i=0; i<n-1;i++){
//같을 경우와 하나 차이날 경우는 continue;
if(nums[i]== nums[i+1]||nums[i]+1== nums[i+1]) continue;
else list.add(makeRange(nums[i]+1, nums[i+1]-1));
}
if(upper>nums[n-1]){
list.add(makeRange(nums[n-1]+1, upper));
}
return list;
}
//같으면 한개만, 다르면 범위로
private String makeRange(int start, int upper){
return lower==upper? Integer.toString(lower):(lower+"->"+upper);
}
}
728x90
반응형
'Java > Java 알고리즘 LeetCode' 카테고리의 다른 글
[LeetCode- Ch4. 투 포인터] 1. 단어중복없는 가장 긴 문자열 #(+ 슬라이딩 윈도우) (0) | 2022.10.31 |
---|---|
[LeetCode- Ch3. 배열] 7. 나선형 매트릭스 # (0) | 2022.10.29 |
[LeetCode- Ch3. 배열] 5. 빗물 담기 # [+ 분할과 정복] (0) | 2022.10.29 |
[LeetCode- Ch3. 배열] 4. 그룹 아나그램 (+ computeIfAbsent() ) (0) | 2022.10.29 |
[LeetCode- Ch3. 배열] 3. 부분배열 최댓값 (+ DP) (0) | 2022.10.29 |