바이트 댄스

3164 단어 데이터 구조
2. 글 의 질 을 향상 시 키 기 위해 모든 글 (전부 영어 라 고 가정) 은 m 민 편집 이 심 사 를 하고 모든 편집 이 독립 적 으로 일 을 하면 문제 가 있다 고 생각 하 는 문장 을 다음 표를 통 해 기록한다. 예 를 들 어 [1, 10], 1 은 병 구 를 나타 내 는 첫 번 째 문자, 10 은 병 구 를 나타 내 는 마지막 문자 이다.즉, 1 부터 10 까지 10 글자 로 구 성 된 문장 은 문제 가 있다.
지금 은 여러 명의 편집 에 문제 가 있 는 문장 을 합 쳐 편집장 에 게 최종 심 사 를 보 내야 한다.예 를 들 어 편집 A 가 지적 한 병 구 는 [1, 10], [32, 45] 이다.편집 B 가 지적 한 병 구 는 [5, 16], [78, 94] 그러면 [1, 10] 과 [5, 16] 이 교차 되 어 [1, 16] [32, 45] [78, 94] 로 합병 할 수 있다.
입력 설명:
수량 m 를 편집 한 후 줄 마다 편집 한 표 시 된 다음 표 조합 입 니 다. 첫 번 째 와 마지막 표 시 는 영문 쉼표 로 구분 되 고 각 조 의 아래 표 시 는 분점 으로 구 분 됩 니 다.
출력 설명:
합 친 다음 에 표 시 된 집합 은 첫 번 째 와 마지막 에 표 시 된 것 은 영문 쉼표 로 구분 되 고 각 조 의 아래 표 시 는 분점 으로 구분 된다.반환 결 과 는 어 릴 때 부터 점점 늘 어 나 는 배열 이다.
입력
3
1,10;32,45
78,94;5,16
80,100;200,220;16,32
출력: 1, 45;78,100;200,220
자바 구현:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Problem2 {
    static String input = "3
" + "1,10;32,45
" + "78,94;5,16
" + "80,100;200,220;16,32"; static class Range implements Comparable{ private int start; private int end; public Range(int start, int end) { this.start = start; this.end = end; } @Override public String toString() { return start +"," + end +";"; } @Override public int compareTo(Range o) { return start - o.start; } public boolean isCombine(Range o){ return end+1 >= o.start; } public Range combine(Range o){ if(isCombine(o)){ start = Math.min(start,o.start); end = Math.max(end,o.end); } return this; } } static void handleInput(){ String[] lines = input.split("
"); List ranges = new ArrayList<>(10); for (int i = 1 ; i < lines.length; i++) { String[] pairs = lines[i].split(";"); for (String pair: pairs) { String[] se = pair.split(","); ranges.add(new Range(Integer.valueOf(se[0]),Integer.valueOf(se[1]))); } } Range[] rs = ranges.toArray(new Range[]{}); Arrays.sort(rs); ranges.clear(); Range cur,next; for (int i = 0; i < rs.length-1; i++) { cur = rs[i]; next = rs[i+1]; if(cur.isCombine(next)){ rs[i+1] = cur.combine(next); }else{ ranges.add(cur); } // if(i+1 == rs.length-1){ ranges.add(rs[i+1]); } } StringBuilder output = new StringBuilder(); for (Range range: ranges) { output.append(range); } System.out.println(output.substring(0,output.length()-1)); } public static void main(String[] args) { handleInput(); } }

좋은 웹페이지 즐겨찾기