当前位置:实例文章 » 其他实例» [文章]leetcode-labuladong-go语言实现

leetcode-labuladong-go语言实现

发布人:shili8 发布时间:2025-01-04 17:15 阅读次数:0

**LeetCode Labuladong Go语言实现**

Labuladong 是一个非常有名的算法学习网站,提供了大量的算法题目和解决方案。以下是对 LeetCode 上的一些常见问题的 Go语言实现。

### 一、链表相关问题####1.2.1. 删除链表的倒数第 N 个节点**删除链表的倒数第 N 个节点**

给定一个链表和一个整数 `n`,从链表中删除倒数第 `n` 个节点。

示例:

输入:`head = [1,2,3,4,5]`, `n =2`
输出:`[1,2,3,5]`

go// Definition for singly-linked list.
type ListNode struct {
Val intNext *ListNode}

func removeNthFromEnd(head *ListNode, n int) *ListNode {
	dummy := &ListNode{0, head}
	prev := dummy	for i :=0; i < n+1; i++ {
	prev = prev.Next}
	for prev != nil && prev.Next != nil {
	prev = prev.Next}
	prev.Next = prev.Next.Next	return dummy.Next}


####1.2.2. 检测链表是否有环**检测链表是否有环**

给定一个链表,判断链表是否有环。

示例:

输入:`head = [3,2,0,-4]`
输出:`true`

gofunc hasCycle(head *ListNode) bool {
	if head == nil || head.Next == nil {
	return false}
	slow := head	fast := head.Next	for slow != fast {
	if fast == nil || fast.Next == nil {
	return false}
	slow = slow.Next	fast = fast.Next.Next}
	return true}


### 二、树相关问题####2.1. 验证二叉树是对称的**验证二叉树是对称的**

给定一个二叉树,判断该树是否是对称的。

示例:

输入:`root = [1,2,2,3,4,null,null]`
输出:`true`

gofunc isSymmetric(root *TreeNode) bool {
	if root == nil {
	return true}
	return isMirror(root.Left, root.Right)
}

func isMirror(left, right *TreeNode) bool {
	if left == nil && right == nil {
	return true}
	if left == nil || right == nil {
	return false}
	return (left.Val == right.Val) && isMirror(left.Left, right.Right) && isMirror(left.Right, right.Left)
}


####2.2. 二叉树的最大深度**二叉树的最大深度**

给定一个二叉树,求该树的最大深度。

示例:

输入:`root = [3,9,20,null,null,15,7]`
输出:`3`

gofunc maxDepth(root *TreeNode) int {
	if root == nil {
	return0}
	return1 + max(maxDepth(root.Left), maxDepth(root.Right))
}

func max(a, b int) int {
	if a > b {
	return a}
	return b}


### 三、数组相关问题####3.1. 最长连续子序列**最长连续子序列**

给定一个整数数组,求该数组的最长连续子序列。

示例:

输入:`nums = [1,9,3,10,4,20,2]`
输出:`6`

gofunc longestConsecutive(nums []int) int {
	if len(nums) ==0 {
	return0}
	numsMap := make(map[int]bool)
	for _, num := range nums {
	numsMap[num] = true}

	maxLength :=1	for num, _ := range numsMap {
	if !numsMap[num-1] {
	currentNum := num	currentLength :=1	for numsMap[currentNum+1] {
	currentNum +=1	currentLength +=1}
	maxLength = max(maxLength, currentLength)
}
}

	return maxLength}


####3.2. 最小的 K 个数**最小的 K 个数**

给定一个整数数组和一个整数 `k`,从该数组中找出最小的 `k` 个数字。

示例:

输入:`nums = [4,5,8,9,10], k =3`
输出:`[4,5,8]`

gofunc topKFrequent(nums []int, k int) []int {
	if len(nums) ==0 || k ==0 {
	return nil}
	numsMap := make(map[int]int)
	for _, num := range nums {
	numsMap[num] +=1}

	var buckets [][]int	for _, count := range numsMap {
	buckets = append(buckets, []int{count, ...})
}

	sort.Slice(buckets, func(i, j int) bool {
	return buckets[i][0] < buckets[j][0]
})

	result := make([]int,0)
	for i :=0; i < k && i < len(buckets); i++ {
	result = append(result, buckets[i][1:])
}

	return result}


以上是对 LeetCode 上的一些常见问题的 Go语言实现。这些代码示例和注释可以帮助你更好地理解算法和数据结构的概念。

其他信息

其他资源

Top