golang算法
文章平均质量分 58
本章节主要讲解golang的算法实现
Go 的学习之路
大四学习小子,喜欢golang开发,关注我和我一起进步吧!
展开
-
golang每日一题(字母异位词分组)
其实这道题从另一个思路来看,问题就迎刃而解了,找出每组字母相同并且字母个数也相同的元素,例如 [“nat”] 和 [“tan”] 这两组元素的大小和字母都相同。我们可以对元素的字母进行排序,然后对这些排序后的元素进行对比,看他是否和数组中的其他元素相等。这时可以借用散列表map,因为map的键是进行哈希的,所以同一个字母哈希的结果是相同的,也就是他们会有同一个键,这样我们可以把具有相同的键的元素,存到一个数组中,然后再把数组返回即可。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。原创 2024-04-02 23:56:02 · 477 阅读 · 0 评论 -
Go实现LRU算法
LRU是内存淘汰策略,LRU (Least recently used:最近最少使用)算法在缓存写满的时候,会根据所有数据的访问记录,淘汰掉未来被访问几率最低的数据。也就是说该算法认为,最近被访问过的数据,在将来被访问的几率最大。双链表的话,那查询的时间复杂度不就是O(n)了,那应该怎么办,于是可以用双链表加Map的方式进行插入和查询,在插入的时候,把key,value 存到map中,那么这样查询的时候时间复杂读不就是O(n)了。,如果读取链表中的元素,他就会加载到。如果内存被读满,那么他就会。原创 2024-01-24 18:48:49 · 762 阅读 · 0 评论 -
Go实现双链表
直接通过root就可以看首位节点// Front 返回双链表的第一个元素地址return nil// Back 返回双链表的做后一个元素地址return nil。原创 2024-01-19 14:10:44 · 641 阅读 · 0 评论 -
Go实现递归算法
这两个条件共同确保递归算法在合适的时候停止,并且在进行递归时问题规模逐渐减小。基线条件提供了终止递归的条件,而递归条件提供了问题继续分解的规则。在编写递归函数时,正确定义这两个条件非常关键,以确保算法的正确性和有效性。在递归算法中其实就是两个条件:基线条件(Base Case)和递归条件(Recursive Case)。哪些问题我们可以考虑使用递归来解决呢?即递归的应用场景一般有哪些呢?下章节我将讲解二分查找树,二分查找树也是用到了递归算法。递归实现斐波那契数列,就是前两个数加起来等于第三个数。原创 2024-01-11 14:23:39 · 604 阅读 · 0 评论 -
Go 实现二分查找
二分查找(Binary Search)是一种用于在有序数组中查找特定元素的高效算法。它的基本思想是通过反复将有序数组分成两半,确定目标元素可能存在的范围,然后逐步缩小这个范围直到找到目标元素或确定目标元素不存在。这个算法的时间复杂度是 O(log n),其中 n 是数组的长度。在有序数组中,二分查找是一种非常高效的查找算法。如果循环结束时仍未找到目标元素,说明目标元素不存在于数组中,返回 -1。以下是一个简单的二分查找的示例代码(假设数组。,初始时分别指向数组的起始和结束位置。时,继续执行以下步骤。原创 2024-01-10 17:17:34 · 744 阅读 · 0 评论 -
Go 每日一题(二)
更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2。输入:nums = [0,0,1,1,1,2,2,3,3,4]输出:5, nums = [0,1,2,3,4]输出:2, nums = [1,2,_]输入:nums = [1,1,2]原创 2024-01-09 15:30:54 · 465 阅读 · 0 评论 -
Go 每日一题(一)
Go运⾏的时候包涵⼀个⾃⼰的调度器,这个调度器使⽤⼀个称为⼀个M:N调度技术, m个goroutine到n 个os线程 (可以⽤GOMAXPROCS来控制n的数量), Go的调度器不是由硬件时钟来定期触发的,⽽是 由特定的go语⾔结构 来触发的,他不需要切换到内核语境,所以调度⼀个goroutine⽐调度⼀个线程的 成本低很多。这种线程切换需要⼀个完整的上下⽂切换:即保存⼀个线程 的状态到 内存,再恢复另外⼀个线程的状态,最后更新调度器的数据结构。某种意义上,这种操作还是很慢的。原创 2023-12-25 09:31:36 · 957 阅读 · 0 评论