깊은바다거북
개발 공부 기록
깊은바다거북
전체 방문자
오늘
어제
  • 분류 전체보기 (219)
    • JAVA (9)
    • JavaScript (15)
    • 스파르타코딩클럽 (11)
      • [내일배움단] 웹개발 종합반 개발일지 (5)
      • [내일배움캠프] 프로젝트와 트러블 슈팅 (6)
    • SQL | NoSQL (4)
    • CS 등등 (0)
    • TIL | WIL (173)
    • 기타 에러 해결 (3)
    • 내 살 길 궁리 (4)

인기 글

최근 글

최근 댓글

태그

  • Preorder Traversal(전위 순회)
  • 팀 프로젝트
  • 최대 힙(Max Heap)
  • 최소 힙(Min Heap)
  • BST(이진 탐색 트리)
  • tree
  • 프로그래머스
  • TypeScript
  • 01. 미니 프로젝트
  • DFS(깊이우선탐색)
  • 자바스크립트 기초 문법
  • Leetcode
  • Til
  • Binary Tree(이진 트리)
  • 트러블 슈팅 Troubleshooting
  • BFS(너비우선탐색)
  • 자잘한 에러 해결
  • 재귀 함수
  • 혼자 공부하는 자바스크립트
  • Trie
  • POST / GET 요청
  • Inorder Traversal(중위 순회)
  • 점화식(Recurrence Relation)
  • 자료 구조
  • 시간 복잡도
  • 코딩테스트 연습문제
  • Backtracking(백트래킹)
  • Linked List
  • leetcode-cli
  • TIT (Today I Troubleshot)
hELLO · Designed By 정상우.
깊은바다거북

개발 공부 기록

10/28 (토) (완료)인터벌이 안 겹치도록 삭제해야 하는 최소 인터벌 개수 TIL
TIL | WIL

10/28 (토) (완료)인터벌이 안 겹치도록 삭제해야 하는 최소 인터벌 개수 TIL

2023. 10. 28. 10:48

공부한 것

  • LeetCode #435. Non-overlapping Intervals
    Non-overlapping Intervals - LeetCode
    Can you solve this real interview question? Non-overlapping Intervals - Given an array of intervals intervals where intervals[i] = [starti, endi], return the minimum number of intervals you need to remove to make the rest of the intervals non-overlapping.   Example 1: Input: intervals = [[1,2],[2,3],[3,4],[1,3]] Output: 1 Explanation: [1,3] can be removed and the rest of the intervals are non-overlapping. Example 2: Input: intervals = [[1,2],[1,2],[1,2]] Output: 2 Explanation: You need to remove two [1,2] to make the rest of the intervals non-overlapping. Example 3: Input: intervals = [[1,2],[2,3]] Output: 0 Explanation: You don't need to remove any of the intervals since they're already non-overlapping.   Constraints: * 1 <= intervals.length <= 105 * intervals[i].length == 2 * -5 * 104 <= starti < endi <= 5 * 104
    https://leetcode.com/problems/non-overlapping-intervals/description/
    • 방법 2(포기): 시작점 기준으로 오름차순 정렬한 후에, 인접한 두 인터벌이 겹치면 둘 중 길이가 더 긴 쪽을 삭제하는 식으로 전체 인터벌을 순회하는 방법. 두 인터벌이 겹치는데 두 길이가 같으면 둘 중 더 뒤쪽에 있는 인터벌을 삭제한다. ⇒ 다음 경우와 같이 이미 삭제하고 지나친 인터벌이 나중에 필요해지는 경우가 생긴다.
    • 방법 3(성공): 끝점 기준으로 오름차순 정렬하고 첫 인터벌을 선택한 후, 그 다음부터 '이전 인터벌의 끝'과 겹치지 않는 가장 가까운 인터벌을 찾아 선택하기를 반복한다. 마지막에는 총 인터벌 개수에서 선택한 인터벌 수를 뺀 값을 반환하면 된다.
      • 방법 3 코드:
        // Time Complexity: O(n log n)
        // Space Complexity: O(log n) 
        function eraseOverlapIntervals(intervals: number[][]): number {
        	if (intervals.length === 1) return 0;
        
        	intervals.sort((a, b) => a[1] - b[1]);
        	let end = intervals[0][1]; // 정렬 후 첫 인터벌은 선택하고 시작
        	let count = 1; // result[]에 넣는 대신 숫자로 셈(=제거하지 않는 인터벌의 수 = '선택'한 인터벌의 수)
        
        	for (let i = 1; i < intervals.length; i++) {
        		const currentStart = intervals[i][0];
        
        		// 현재 인터벌이 이전 인터벌과 겹치지 안으면 현재 인터벌을 (제거하지 않는 것으로) '선택'한다. 
        		if (currentStart >= end) {
        			// '선택': count를 1 늘이고 end를 업데이트함
        			count++;
        			end = intervals[i][1]; 
        		}
        	}
        
        	// 전체 인터벌에서 제거하지 않는 총 인터벌 수를 빼 반환한다. 
        	return intervals.length - count;
        }


Uploaded by N2T

    'TIL | WIL' 카테고리의 다른 글
    • 11/3 (금) 합이 가장 큰 부분 배열 TIL
    • 11/2 (목) 쿼리를 포함하기 위한 최소 인터벌 TIL
    • 10/27 (금) 인터벌이 안 겹치도록 삭제해야 하는 최소 인터벌 개수 TIL
    • 10/26 (목) 겹치는 인터벌 합치기 TIL
    깊은바다거북
    깊은바다거북

    티스토리툴바