【Golang】动态规划
动态规划(Dynamic Programming, DP)是算法中的经典题型,LeetCode 上有许多高频题目。以下是常见的 DP 分类、经典题目及 Golang 实现模板总结: 一、经典题目分类与 Golang 实现1. 线性 DP 题目:70. 爬楼梯 123456789func climbStairs(n int) int { if n <= 2 { return n } dp := make([]int, n+1) dp[1], dp[2] = 1, 2 for i := 3; i <= n; i++ { dp[i] = dp[i-1] + dp[i-2] } return dp[n]} 优化空间(滚动数组): 12345678func climbStairs(n int) int { if n <= 2 { return n } a, b := 1, 2 for i := 3; i...
【Golang】贪心
贪心算法经典题目及Golang实现贪心算法是一种在每一步选择中都采取当前状态下最优的选择,从而希望导致全局最优解的算法策略。以下是一些LeetCode上经典的贪心算法题目及其Golang实现,并总结一个通用的解题模板。 经典贪心题目及Golang实现1. 分发饼干 (455. Assign Cookies)12345678910111213func findContentChildren(g []int, s []int) int { sort.Ints(g) sort.Ints(s) child, cookie := 0, 0 for child < len(g) && cookie < len(s) { if s[cookie] >= g[child] { child++ } cookie++ } return child} 2. 无重叠区间 (435....
【Golang】优先队列
优先队列在LeetCode上的经典题目及Golang实现优先队列(Priority Queue)是一种重要的数据结构,它在很多算法问题中都有广泛应用。以下是LeetCode上一些经典的优先队列题目,以及用Golang实现的解决方案和模板总结。 优先队列的Golang实现在Golang中,我们可以使用container/heap包来实现优先队列。首先,我们需要定义一个实现heap.Interface的类型: 123456789101112131415161718192021222324252627282930313233343536373839import "container/heap"// 定义一个最小堆type MinHeap []intfunc (h MinHeap) Len() int { return len(h) }func (h MinHeap) Less(i, j int) bool { return h[i] < h[j] }func (h MinHeap) Swap(i,...
【Golang】sort.Search二分包
Golang 中二分查找包的使用方法Go 标准库中的 sort 包提供了二分查找的功能,主要通过 sort.Search 函数实现。下面详细介绍如何使用这个功能。 二分法通用模板12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061func binarySearch(nums []int, target int) int { left, right := 0, len(nums)-1 // 初始化边界 for left <= right { // 终止条件 mid := left + (right-left)/2 // 防止溢出 if nums[mid] == target { return mid // 找到目标 } else if nums[mid] <...
【Golang】DFS
LeetCode 上经典的 DFS 题目及 Golang 实现与模板总结DFS(深度优先搜索)是算法面试中的常见题型,下面我将总结 LeetCode 上一些经典的 DFS 题目,并用 Golang 实现,最后提炼出通用的 DFS 解题模板。 经典 DFS 题目分类及 Golang 实现1. 二叉树遍历类题目 94. 二叉树的中序遍历12345678910111213141516171819202122/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */func inorderTraversal(root *TreeNode) []int { var res []int var dfs func(node *TreeNode) dfs = func(node *TreeNode) { if node ==...
【Golang】BFS
LeetCode BFS 练习题单与模板总结 (Golang 实现)BFS(广度优先搜索)是一种重要的图遍历算法,特别适合解决最短路径、层次遍历等问题。以下是 Golang 实现的 BFS 模板和分类练习题单。 BFS 通用模板 (Golang)1. 树的 BFS 模板123456789101112131415161718192021222324252627282930313233343536type TreeNode struct { Val int Left *TreeNode Right *TreeNode}func levelOrder(root *TreeNode) [][]int { if root == nil { return [][]int{} } var result [][]int queue := []*TreeNode{root} for len(queue) > 0...
【Golang】滑动窗口
Golang 滑动窗口模板与套路详解针对 LeetCode 1004(最大连续1的个数 III)这类问题,以下是专门为 Golang 开发者准备的滑动窗口实现模板、适用场景和常见变种: Golang 滑动窗口模板(1004 类型)12345678910111213141516171819202122232425func longestOnes(nums []int, k int) int { left, maxLen, zeroCount := 0, 0, 0 for right := 0; right < len(nums); right++ { // 1. 右指针移动:更新窗口状态 if nums[right] == 0 { zeroCount++ } // 2. 左指针移动:当窗口不合法时收缩 for zeroCount > k { if nums[left] == 0...
【Golang】slice append 和copy对比
正确123456789101112131415161718 func reconstructQueue(people [][]int) [][]int { //先将身高从大到小排序,确定最大个子的相对位置 sort.Slice(people,func(i,j int)bool{ if people[i][0]==people[j][0]{ return people[i][1]<people[j][1]//这个才是当身高相同时,将K按照从小到大排序 } return people[i][0]>people[j][0]//这个只是确保身高按照由大到小的顺序来排,并不确定K是按照从小到大排序的 }) //再按照K进行插入排序,优先插入K小的 result := make([][]int, 0) for _, info := range people { result = append(result,...
【Golang】 switch使用
在 Go 语言中,switch 语句提供了灵活的条件分支控制,相比其他语言有更多特性。以下是详细用法和示例: 1. 基础值匹配12345678910111213day := 3switch day {case 1: fmt.Println("Monday")case 2: fmt.Println("Tuesday")case 3: fmt.Println("Wednesday") // 输出case 4: fmt.Println("Thursday")default: fmt.Println("Weekend")} 2. 多值匹配(逗号分隔)123456789char := 'a'switch char {case 'a', 'e', 'i', 'o', 'u': ...
【转载】Golang 新手可能会踩的 50 个坑
转载:wuYin/blog 原文:50 Shades of Go: Traps, Gotchas, and Common Mistakes,翻译已获作者 kcqon 授权。 不久前发现在知乎这篇质量很高的文章,打算加上自己的理解翻译一遍。文章分为三部分:初级篇 1-34,中级篇 35-50,高级篇 51-57 前言Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免会遇到很多坑,不过它们大多不是 Go 本身的设计缺陷。如果你刚从其他语言转到 Go,那这篇文章里的坑多半会踩到。 如果花时间学习官方 doc、wiki、讨论邮件列表、 Rob Pike 的大量文章以及 Go 的源码,会发现这篇文章中的坑是很常见的,新手跳过这些坑,能减少大量调试代码的时间。 初级篇:1-341. 左大括号 { 一般不能单独放一行在其他大多数语言中,{ 的位置你自行决定。Go 比较特别,遵守分号注入规则(automatic semicolon injection):编译器会在每行代码尾部特定分隔符后加 ; 来分隔多条语句,比如会在 )...