Golang 통합 체인 테이블에서 채팅 귀속
합병 체인 테이블에서 차례로 돌아가다
귀속은 엔지니어가 가장 흔히 볼 수 있는 문제를 해결하는 방식이지만, 때로는 진정으로 파악하기가 쉽지 않다.어떤 사람은 보기에는 매우 간단해 보이지만, 스스로 쓰기에는 좀 힘이 든다고 말한다.
가장 유명한 예는 피보나치 수열(Fibonacci sequence)으로 점차적 공식을 찾아 결과를 계산한다.최근에 나온 통합 체인 테이블의 알고리즘 문제도 귀환으로 실현할 수 있다.다음은 제목 설명을 살펴보겠습니다.
。 。
:
:1->2->4, 1->3->4
:1->1->2->3->4->4
: (LeetCode)
먼저 본인의 관점을 내놓고 귀환의 관건은 경계 조건과 귀환 공식을 찾는 것이다.
제목을 분석하면 첫 번째 체인표 l1의 머리 노드로 l2의 노드와 비교할 수 있다. 만약에 l2의 현재 노드보다 크면 l1의next와 l2의 크기를 계속 비교할 수 있다.반대로 l1의 헤드 노드가 L2의 현재 노드보다 작다면 l2에 대해 유사한 처리를 해야 한다.이런 끊임없는 대비와 편이의 과정은 일종의 귀속 공식을 총결해 낼 수 있다.위조 코드로 쓰는 방법은 다음과 같다.
if l1.val < l2.val:
l1.next = mergeTwoList(l1.next, l2)
return l1
else:
l2.next = mergeTwoList(l1, l2.next)
return l2
경계 조건은 끊임없이 이동할 때 어떤 체인 테이블의 마지막 노드에 도착할 때까지 위조 코드는 다음과 같다.
if l1 === null:
return l2
if l2 === null:
return l1
Golang으로 구현되며 코드도 명확합니다.
type ListNode struct {
Val int
Next *ListNode
}
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
if l1 == nil {
return l2
}
if l2 == nil {
return l1
}
if l1.Val < l2.Val {
l1.Next = mergeTwoLists(l1.Next, l2)
return l1
} else {
l2.Next = mergeTwoLists(l1, l2.Next)
return l2
}
}
LeetCode에서 제출한 실행 피드백은 다음과 같습니다.
:
:
0 ms
, Go
100.00%
:
2.6 MB
, Go
63.64%
귀환은 메모리를 매우 소모하는 것으로, 마치 루즈벨트처럼, 한 층 한 층 내층으로 돌아가는 호출 결과를 볼 수 있다.
최적화를 위해 교체 방식을 사용할 수 있으며 코드는 몇 가지 조정이 필요합니다.
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
head := &ListNode{}
result := head
for l1 != nil && l2 != nil {
if l1.Val < l2.Val {
head.Next = l1
head = head.Next
l1 = l1.Next
} else {
head.Next = l2
head = head.Next
l2 = l2.Next
}
}
if l1 == nil {
head.Next = l2
}
if l2 == nil {
head.Next = l1
}
return result.Next
}
오프셋을 하기 위해 머리 포인터를 만들어야 하고, 최종적으로result는 합성 결과 체인 테이블로 결과를 저장해야 한다는 것을 알 수 있다.마지막으로 실행을 제출하였는데 결과 데이터가 약간 보기 좋았습니다.
:
4 ms
, Go
62.28%
:
2.5 MB
, Go
100.00%
데이터의 양이 크지 않은 상황에서 사실 성능의 차이도 크지 않기 때문에 귀속을 사용하는 것도 문제가 없다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.