LeetCode 통합 문제 요약
7435 단어 LeetCode 문제
1. 그룹 통합에 관하여: (LeetCode 88:merge-sorted-array)
Given two sorted integer arrays A and B, merge B into A as one sorted array.
Note: You may assume that A has enough space to hold additional elements from B. The number of elements initialized in A and B are m and n respectively.
제목: 두 개의 정렬된 정수 그룹 A와 B를 주고 B를 하나의 정렬된 그룹으로 합친다.
public class Solution {
public void merge(int A[], int m, int B[], int n) {
int index = m+n-1;
int i = m-1;
int j = n-1;
while(index>=0 && j>=0 && i>=0){
if(A[i]<=B[j])
A[index--]=B[j--];
else
A[index--]=A[i--];
}
if(i<0){
while(j>=0)
A[index--]=B[j--];
}
if(j<0){
while(i>=0)
A[index--]=A[i--];
}
}
}
2. 두 개의 질서정연한 체인 테이블의 통합: (LeetCode 21:merge-two-sorted-lists)
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
검지offer의 원제이기도 하며, 귀속으로 처리한다.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 ==null && l2 == null)
return null;
if(l1==null)
return l2;
if(l2 == null)
return l1;
if(l1.val
3. 여러 개의 질서정연한 체인 테이블을 합친다: (LeetCode 23:merge-k-sorted-lists)
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
여러 개의 질서정연한 체인표는 한 번에 합병할 수 있고 상술한 두 개의 질서정연한 체인표의 합병을 호출할 수 있다.두 개의 정렬 체인 테이블의 통합을 바탕으로 매 라운드의 복잡도 o(n), n은 총 노드 개수, T(n)= 2T(n/2)+o(n), 교체 횟수는 k이기 때문에 복잡도는 o(n*k)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
import java.util.*;
public class Solution {
public ListNode mergeKLists(ArrayList lists) {
ListNode node = new ListNode(1);
if(lists.size()<1)
return null;
node = lists.get(0);
if(lists.size()==1)
return node;
for(int i =1;i
병합 방법을 사용하여 두 개를 합칠 수도 있다.
// o(nlogn)
import java.util.*;
public class Solution {
public ListNode mergeKLists(ArrayList lists) {
if(lists==null||lists.size()==0){
return null;
}
return mergeKList(lists,0,lists.size()-1);
}
public ListNode mergeKList(ArrayList lists,int lo,int hi){
if (hi<=lo) return lists.get(lo);
int mid=lo+(hi-lo)/2;
ListNode left = mergeKList(lists,lo,mid);
ListNode right = mergeKList(lists,mid+1,hi);
return merge(left,right);
}
public ListNode merge(ListNode left,ListNode right){
ListNode h = new ListNode(-1);
ListNode tmp=h;
while(left!=null&&right!=null){
if(left.val
4. 구간 통합: (LeetCode 56:merge-intervals)
Given a collection of intervals, merge all overlapping intervals.
For example, Given[1,3],[2,6],[8,10],[15,18], return[1,6],[8,10],[15,18].
구간 시작 값에 따라 오름차순 정렬을 한 다음list 집합에 첫 번째 구간을 추가하고 후속 구간 값을 순서대로 비교합니다. 범위에 없으면 추가되고, 일부분을 포함하면 업데이트합니다.
/**
* Definition for an interval.
* public class Interval {
* int start;
* int end;
* Interval() { start = 0; end = 0; }
* Interval(int s, int e) { start = s; end = e; }
* }
*/
import java.util.*;
public class Solution {
public ArrayList merge(ArrayList intervals) {
ArrayList list = new ArrayList();
if(intervals.size()<1)
return list;
Collections.sort(intervals,new Comparator(){
public int compare(Interval o1,Interval o2){
return o1.start-o2.start;
}
});
list.add(intervals.get(0));
for(int i =1;i=intervals.get(i).start
&& list.get(list.size()-1).end<=intervals.get(i).end){
list.get(list.size()-1).end = intervals.get(i).end;
}else if(list.get(list.size()-1).end>=intervals.get(i).start
&& list.get(list.size()-1).end>=intervals.get(i).end){
continue;
}else{
list.add(intervals.get(i));
}
}
return list;
}
}
5. 구간 삽입 후 병합(LeetCode: insert-interval)
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary). You may assume that the intervals were initially sorted according to their start times.
Example 1: Given intervals[1,3],[6,9], insert and merge[2,5]in as[1,5],[6,9]. Given[1,2],[3,5],[6,7],[8,10],[12,16], insert and merge[4,9]in as[1,2],[3,10],[12,16].This is because the new interval[4,9]overlaps with[3,5],[6,7],[8,10].
삽입을 하면서 업데이트를 합니다. 삽입 조건이 충족되지 않으면 기존 구간을 결과에 추가하고, 기존 구간과 중첩된 경우 삽입 구간을 합쳐서 다음 삽입을 합니다. 삽입 구간의 end 값이 구간의 시작 값보다 작을 때까지 비교를 끝내고, 마지막으로 기존 집합의 값을 결과에 삽입하여 결과를 되돌려줍니다.
/**
* Definition for an interval.
* public class Interval {
* int start;
* int end;
* Interval() { start = 0; end = 0; }
* Interval(int s, int e) { start = s; end = e; }
* }
*/
import java.util.*;
public class Solution {
public ArrayList insert
(ArrayList intervals, Interval newInterval) {
ArrayList result = new ArrayList();
if(intervals.size()==0){
result.add(newInterval);
return result;
}
boolean flag = false;
int i =0;
for(;i newInterval.end){
break;
}else{
newInterval.start =
Math.min(intervals.get(i).start,newInterval.start);
newInterval.end =
Math.max(intervals.get(i).end,newInterval.end);
}
}
result.add(newInterval);
for(;i
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode637. 두 갈래 나무의 층 평균치비공 두 갈래 나무를 정하고 각 층 노드의 평균값으로 구성된 그룹을 되돌려줍니다. 예 1: 참고: 노드 값의 범위는 32비트 기호 정수 범위 내에.. 사고방식: 넓이를 우선적으로 두 갈래 나무를 두루 훑어본다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.