- 博客(27)
- 收藏
- 关注
原创 leetcode295.数据流的中位数
中位数是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。例如 arr = [2,3,4] 的中位数是 3。例如 arr = [2,3] 的中位数是 (2 + 3) / 2 = 2.5。
2023-03-11 02:12:42
138
原创 leetcode1590. 使数组和能被 P 整除
给你一个正整数数组nums,请你移除子数组(可以为),使得剩余元素的能被p整除。将整个数组都移除。请你返回你需要移除的最短子数组的长度,如果无法满足题目要求,返回-1。定义为原数组中连续的一组元素。1nums 中元素和为 10,不能被 p 整除。我们可以移除子数组 [4] ,剩余元素的和为 6。2我们无法移除任何一个元素使得和被 9 整除,最优方案是移除子数组 [5,2] ,剩余元素为 [6,3],和为 9。0和恰好为 6 ,已经能被 3 整除了。所以我们不需要移除任何元素。-1。
2023-03-11 02:09:34
163
原创 leetcode289.生命游戏
根据 百度百科 , 生命游戏 ,简称为 生命 ,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态: 1 即为 活细胞 (live),或 0 即为 死细胞 (dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;
2023-03-10 12:08:17
229
原创 golang context
context.Background:返回一个空的根context,通常用于main函数或测试代码中。context.TODO:返回一个空的临时context,通常用于不确定要使用哪种context时。
2023-03-10 11:53:16
275
原创 golang defer
import ("fmt"result += 10 // 在返回之前增加10}()result = a + b // 计算a和b的和return // 返回resultfmt.Println(add(1, 2)) // 打印13。
2023-03-10 11:03:05
48
原创 golang select
在这个例子中,我们创建了两个整数类型的通道ch1和ch2,并分别在两个goroutine(轻量级线程)中向它们发送数据。然后我们使用select语句来监听这两个通道上是否有数据可接收。因为我们在发送数据之前都加了延时操作,所以当我们运行select语句时,没有任何case满足条件,所以会执行default分支打印"No data received"。
2023-03-10 10:49:41
49
原创 Go语言接口
例如,我们定义了一个接口 MyInterface ,它包含两个方法 Method1 和 Method2。如果我们定义了一个结构体 MyStruct ,并为它实现了这两个方法,那么 MyStruct 就隐式地实现了 MyInterface ,不需要在代码中声明。
2023-03-10 09:31:40
42
原创 Go语言函数
函数是一种类型,可以赋值给变量或作为参数传递。例如:// 定义一个函数类型type Add func(a int, b int) int// 定义一个符合该类型的函数func add(a int, b int) int { return a + b}// 将函数赋值给变量var f Add = add// 将函数作为参数传递func apply(op Add, a int, b int) int { return op(a, b)
2023-03-09 02:39:54
38
原创 Go字符串
字符串的定义和表示:字符串在Go语言中是一个不可变的字节序列,它由一个指向底层字节数组的指针和一个长度组成。例如,s := "hello"定义了一个字符串变量s,它指向一个包含5个字节的数组,并且长度为5。字符串的操作:字符串可以使用+运算符进行拼接,但是这会产生新的字符串对象和内存分配。例如,s1 := "hello" + "world"会创建一个新的字符串对象s1,并且分配10个字节的内存空间。如果要避免额外的内存分配,可以使用strings.Builder类型来构建字符串。字符串的编码
2023-03-09 02:19:04
257
原创 Go语言map
哈希表是一种通过键值对存储数据的数据结构,它可以快速地查找、插入和删除元素。例如,你可以创建一个哈希表来存储学生的姓名和成绩:var scores = map[string]int {"Alice": 90, "Bob": 80, "Charlie": 85}然后你可以通过姓名来查找或修改成绩:fmt.Println(scores["Alice"]) // 90scores["Bob"] = 95 // update Bob's score或者你可以遍历哈希表中的所有键值对:
2023-03-09 02:14:35
57
原创 Go语言切片
切片是一种动态数组,它可以根据需要增长或缩小,它在声明时只需要指定元素的类型。例如,你可以创建一个字符串切片,并给它赋值:var names = []string {"Alice", "Bob", "Charlie"}或者你可以使用 make 函数来创建一个指定长度和容量的整型切片:var numbers = make([]int, 5, 10)切片是一个结构体,它包含了一个指向底层数组的指针、切片的长度和容量。例如,你可以使用 len 和 cap 函数来获取切片的长度和容量:f
2023-03-09 01:42:26
44
原创 Go语言数组
数组是由相同类型元素的集合组成的数据结构,计算机会为数组分配一块连续的内存来保存其中的元素,我们可以利用数组中元素的索引快速访问特定元素。 Go 语言中数组是一个值类型,它在赋值或者作为函数参数传递时都会发生完整的拷贝。 Go 语言中数组的长度是固定的,它在编译期间就已经确定了,并且作为数组类型的一部分。 Go 语言中支持多维数组,但是多维数组并不是由嵌套的一维数组组成,而是由连续内存上分割出来的多个区域组成。 Go 语言提供了 range 关键字来遍历数组中的元素,range 关键字会返回每个元素
2023-03-09 01:27:58
59
原创 leetcode11.盛最多水的容器
盛最多水的容器给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例
2023-03-09 01:12:37
110
原创 leetcode10.正则表达式匹配
正则表达式匹配给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = "aa", p = "a"输出:false解释:"a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa", p = "a*"输出:true解释:因为 '*' 代表可以匹配零个或多个前面的那一个
2023-03-09 00:58:59
43
原创 leetcode8.字符串转换整数
字符串转换整数请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。 将前面步骤读入的这些
2023-03-09 00:39:36
42
原创 leetcode7.整数反转
整数反转给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321最优解决方案去掉符号单独处理。使用一个变量来存储反转后的数字,然后每次从原始数字的末尾取出一位数字,反转后的数字乘以 10 并加上末尾数字。它必须
2023-03-09 00:22:48
43
原创 leetcode6.N字形变换
N字形变换将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。最优解决方案根据给定的行数 numRows,创建一个列表,每个元素是一
2023-03-09 00:01:08
113
原创 leetcode5.最长回文子串
最长回文子串给你一个字符串 s,找到 s 中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"最优解决方案有很多算法可以解决这个问题,但是其中最快的算法是Manacher(马拉车)算法,它的时间复杂度是 O(n),也就是说它只需要扫描一遍字符串就可以找到最长的回文子串。具体来说,Manache
2023-03-08 23:47:23
144
原创 leetcode4.寻找两个正序数组的中位数
寻找两个正序数组的中位数给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (m+n)) 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,
2023-03-08 23:00:48
38
原创 leetcode3.无重复字符的最长子串
无重复字符的最长子串给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。最优解决方案滑动窗口法。就是用一个窗口(或者说一个区间)来表示当前不重复的子串,窗口的左边界是 start ,右边界是 i 。每次遇到一个新的字符,就把它放进窗口里,并记录它的位置。如果发现这个字符已经在窗口里出现过了,就说明这个子串不能再延长了,需要把窗口左边往右移动一点,直到把重复的字符排除在外。然后再计算一下这个窗口有多长,如果比之前记录的最长子串还要长,就更新一下最长子串的长度。这样一直遍历完整
2023-03-08 22:24:23
30
原创 leetcode2.两数相加
两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。最优解决方案就是像小学时候学习的竖式加法一样,从右往左依次相加每一位,并注意进位。只不过这里是用链表来表示数字,并且是逆序存储的。创建一个新的链表,用来存储两个链表相加的结果。 初始化两个指针,分别指向两个链表的头节点。 初始化一个进位标志 ca
2023-03-08 22:17:07
42
原创 leetcode1.两数之和
两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。最优解决方案创建一个空的哈希表(也叫字典),然后遍历数组中的每个元素,对于每个元素x,先计算target-x的值y,然后在哈希表中查找是否有y的键存在,如果存在,就说明找到了两个和为target的元素,返回它们的下标;如果不存在,就
2023-03-08 22:07:58
40
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人