LRU
146. LRU 缓存 - 力扣(LeetCode) list Elemet 双向列表; 123456789101112131415161718192021222324252627282930313233343536373839404142434445import "container/list"type LRUCache struct { cap int // 缓存容量 cache map[int]*list.Element//!!! 双向链表 使用Element // 双向链表节点 指向的map list *list.List // 双向链表}type keyVal struct { key, val int // 节点的Key和Value}func Constructor(capacity int) LRUCache { return LRUCache{ cap: capacity,...
leetcode 最大深度和最小深度
题目104. 二叉树的最大深度 - 力扣(LeetCode) 111. 二叉树的最小深度 - 力扣(LeetCode) 思路深度 是指从根节点到该节点的距离(节点数量)高度 是指从该节点到叶子节点的角力(节点数量) 最大深度 可以通过迭代法,计算总共有多少层。 可以使用递归分治的思想,1 + maxDepth(左子树) + maxDepth(右子树)最小子树 其实和最大深度类似,但是这里要注意的是,不能直接套用最大深度的代码。最小子树的要求是,到叶子节点的距离。而上边最大深度没有这个要求。所以要对一侧子树为空的情况需要单独讨论。以下是代码实现: 最大深度递归分治后序遍历 需要调用自生函数,需要严格按照定义调用递归。 1234567891011121314151617// 定义:输入根节点,返回这棵二叉树的最大深度func maxDepth(root *TreeNode) int { if root == nil { return 0 } rightMaxDepth := maxDepth(root.Right) ...
Go语言中的byte类型与Unicode码点与整数的转换
byte类型与Unicode码点的转换在Go语言中,byte 类型是无符号的8位整数类型,而字符类型 rune 则用于表示Unicode码点。 当我们将一个 byte 类型的值转换为对应的 int 类型时,它实际上是将字节的数值直接转换为 int。这种转换通常用于将ASCII字符转换为对应的整数。 123456789101112package mainimport ( "fmt")func main() { b := byte('A') i := int(b) fmt.Printf("Byte: %c, Unicode码点: %d, 转换后的整数: %d\n", b, b, i)} 在上面的示例代码中,我们将字符 ‘A’ 转换为 byte 类型并赋值给变量 b,然后再将 b 转换为 int 类型并赋值给变量 i。输出结果如下: 1Byte: A, Unicode码点: 65, 转换后的整数: 65 可以看到,转换后的整数值与字符 ‘A’...
Mesh组网:家庭路由和无线连接新方式
在当今互联的世界中,传统的网络常常面临覆盖范围、可靠性和可扩展性方面的限制。Mesh组网作为一种解决方案应运而生,通过创建一个动态网络,使设备能够直接相互通信,形成一个弹性和高效的网络基础设施。本文将从what、how和why的角度探讨Mesh组网。 what Mesh组网是什么? Mesh组网是一种分散式无线通信系统,允许设备直接相互连接,形成交织在一起的节点网状结构。与传统的网络不同,依赖于中心接入点,Mesh网络使得设备能够同时充当客户端和路由器的角色。Mesh中的每个设备可以将数据中继到其他节点,扩大网络的覆盖范围并增强其鲁棒性。 how Mesh组网如何实现?...
链表总结
链表的合并 虚拟头节点 拉拉链 1234567891011121314151617181920212223242526272829303132func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode { // 虚拟头结点 dummy := &ListNode{-1, nil} p := dummy p1 := l1 p2 := l2 for p1 != nil && p2 != nil { // 比较 p1 和 p2 两个指针 // 将值较小的的节点接到 p 指针 if p1.Val > p2.Val { p.Next = p2 p2 = p2.Next } else { p.Next = p1 p1 = p1.Next ...
数组双指针刷题总结
双指针技巧分为快慢指针和左右指针 快慢指针 原地修改数组 遍历fast 去探路,探到符合条件的将其赋值给slow,并slow++ 去除有序数组/链表中去重 和上边类似,例如删除指定元素v: 遍历fast ,判断不符合该条件的(!=v),slow++; num[slow] == num[fast] 左右指针1.二分查找 * 有序,直接找中间的点,判断中间是否符合对应的题目逻辑,将中间点赋值为左边界或者右边界2.N sum 之和 * 一般是有序数组,然后左右相加,利用右边向内部移动数值减小和左边向内部移动数组变大3.反转字符串 * 终止条件是i>j4.回文串判断 * 判断条件s[i] == s[j]
leetcode 1170. 比较字符串最小字母出现频次
1170. 比较字符串最小字母出现频次 - 力扣(Leetcode) 后缀和(Prefix Sum)是一种常用于区间和计算的技巧。它通过预处理把一个数组的前缀和先计算出来,然后在查询某个区间的和时,只需要构造两个前缀和相减即可得到所求的区间和。 具体而言,假设有一个长度为 n 的整数数组 A,记 S[i] 为 A[0]+A[1]+…+A[i-1] 的前缀和,其中 0≤i<n。那么对于任何 0≤l≤r<n,A[l]+A[l+1]+…+A[r] = S[r+1]-S[l]。 在实际的应用中,如果需要进行多次区间和查询,可以利用后缀和技巧预处理出 A 数组的前缀和,并存储在一个新的数组 S 中。这样,对于任意区间 [l,] 查询,只需要计算 S[r+1]-S[l] 即可,时间复杂度为 O(1)。 不使用后缀和1234567891011121314151617181920212223242526272829303132func f(s string) int { cnt := 0 ch := 'z' for _, c...
什么是二进制的按位或和按位异或
按位或(bitwise OR)和按位异或(bitwise XOR)是两种二进制位运算。但是这两个概念很容易忘记或者混淆,今天我们就来加深一下印象吧! 按位或运算符(|)对两个二进制数的每一位都执行逻辑或操作,返回一个新的二进制数。其真值表如下 123456input bit a | input bit b | output ------------------------------- 0 | 0 | 0 0 | 1 | 1 1 | 0 | 1 1 | 1 | 1 例如,执行 6 (二进制位 110) 和 3 (二进制位 011) 的按位或运算 会得到 7 (二进制位 111): 12345 110| 011----- 111 按位异或运算符(^)对两个二进制数的每一位都执行逻辑异或操作,返回一个新的二进制数。其真值表如下: 1234567input bit a | input bit b |...
leetcode 2460.对数组执行操作 2023.05.06每日一题
2460. 对数组执行操作 - 力扣(Leetcode) 思路直接模拟 Code第一版时间复杂度:O(n)空间复杂度:O(n) 123456789101112131415161718192021func applyOperations(nums []int) []int { var res []int res = make([]int, len(nums)) index := 0 // 第一次遍历 进行赋值操作 for i := 0; i < len(nums)-1; i++ { if nums[i] == nums[i+1] { nums[i] *= 2 nums[i+1] = 0 } } // 第二次遍历 将非0移动到前边 for i := 0; i < len(nums); i++ { if nums[i] != 0 { res[index] = nums[i] index++ } } return...
leetcode 28.找出字符串中第一个匹配项的下标
28. 找出字符串中第一个匹配项的下标 - 力扣(Leetcode) 简单解法利用split 函数,判断是否能够拆分,如果 12345678910111213func strStr(haystack string, needle string) int { // 使用split 函数,如果存在needle,则会把其切分为至少两个元素的切片 splitList := strings.Split(haystack, needle) // 如果长度为1,且needle!=haystack 说明没找到匹配项,返回-1 if len(splitList)== 1 && needle!=haystack { return -1 } if len(splitList) > 1 { return len(splitList[0]) } // needle 在haystack的最开头,返回0 return 0} 123456789101112 func main() { ...