go语言刷题
暖雪冷泉
go big or go home
展开
-
go语言刷题:1091. 计算在网格中从原点到特定点的最短路径长度
1、从 {0,0}出发【加入队列】,经过 八个方向2、每次到达一个点,只要满足条件,就加入队列,加入队列意味着下一轮会从该节点出发[也就是 A点出发到达B点,下次以B点为起点出发到达C点,每次到达一个点后,就以到达的点为起点]3、已经被走过的点就不用再走了,应为那个点说明有人提前到过了4、 只有当前到达的点 是 右下角的点 就可以直接返回,不需要遍历剩余的注: 因为是最短路径,需要明确并认同,最先到达右下角的一次走法,最短路径可以理解为,多个人A从点出发去B点,每个人的速度相同,那么最先到达B点.原创 2022-04-02 21:56:23 · 460 阅读 · 0 评论 -
go语言刷题:763. 划分字母区间
763. 划分字母区间例1:输入:S = "ababcbacadefegdehijhklij"输出:[9,7,8]解释:划分结果为 "ababcbaca", "defegde", "hijhklij"。每个字母最多出现在一个片段中。像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。思路:1.记录每个字母在S中最后出现的下标;2.从下标0开始尝试分段,左边界left是0;3.“同一个字母必须在同一片段中”,所以初始right是该原创 2021-04-19 17:04:29 · 92 阅读 · 0 评论 -
go语言刷题:744. 寻找比目标字母大的最小字母
744. 寻找比目标字母大的最小字母一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请寻找在这一有序列表里比目标字母大的最小字母。示例:输入:letters = ["c", "f", "j"]target = "a"输出: "c"输入:letters = ["c", "f", "j"]target = "c"输出: "f"输入:letters = ["c", "f", "j"]target = "d"输出: "f"输入原创 2021-04-20 20:28:50 · 118 阅读 · 0 评论 -
go语言刷题:695. 岛屿的最大面积
题目给你一个大小为 m x n 的二进制矩阵 grid 。岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。岛屿的面积是岛上值为 1 的单元格的数目。计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。示例 1:输入:grid =[[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,.原创 2022-04-06 20:04:36 · 438 阅读 · 0 评论 -
go语言刷题:680. 验证回文字符串 Ⅱ
680. 验证回文字符串 Ⅱ给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba"输出: True示例 2:输入: "abca"输出: True解释: 你可以删除c字符。func validPalindrome(s string) bool { //记录字符串长度 lenth := len(s) //遍历前半段 for i := 0; i <= lenth/2; i++ { //如果存在不相等的值 if s[i] !=原创 2021-04-11 18:13:20 · 185 阅读 · 0 评论 -
go语言刷题:665. 非递减数列
665. 非递减数列给定一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。非递减数列的定义: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。示例 1:输入: nums = [4,2,3]输出: true解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。示例 2:输入: nums = [4,2,1]输出: false解释: 你不能在只改变一个元原创 2021-04-18 20:23:37 · 182 阅读 · 0 评论 -
go语言刷题:633. 平方数之和
633. 平方数之和func judgeSquareSum(c int) bool { //建立边界条件 if c == 0 || c == 1 { return true } //初始化两指针索引位置,右指针,通过开根号,缩小索引范围 left, right := 0, int(math.Pow(float64(c), 0.5)) //建立循环结束条件 for left <= right { //当符合条件时输出 if left*left+right*right == c原创 2021-04-11 15:17:37 · 112 阅读 · 0 评论 -
go语言刷题:605. 种花问题
605. 种花问题示例 1:输入:flowerbed = [1,0,0,0,1], n = 1输出:true示例 2:输入:flowerbed = [1,0,0,0,1], n = 2输出:falseflowerbed 数组中 1 表示已经种下了花朵。花朵之间至少需要一个单位的间隔,求解是否能种下 n 朵花func canPlaceFlowers(flowerbed []int, n int) bool { //判断特殊情况 if len(flowerbed) < 2 {原创 2021-04-18 19:16:00 · 96 阅读 · 0 评论 -
go语言刷题:540. 有序数组中的单一元素
540. 有序数组中的单一元素给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。示例 1:输入: [1,1,2,3,3,4,4,8,8]输出: 2示例 2:输入: [3,3,7,7,10,11,11]输出: 10思路:令 target_index 为 Single Element 在数组中的位置。在target_index之后,数组中原来存在的成对状态被改变。细心观察可以发现,总是在偶数索引值开始成对出现。如果 mid(中间值) 为偶数,并且 m原创 2021-04-20 21:21:50 · 284 阅读 · 0 评论 -
go语言刷题:524. 通过删除字母匹配到字典里最长单词
524. 通过删除字母匹配到字典里最长单词给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。示例 1:输入:s = "abpcplea", d = ["ale","apple","monkey","plea"]输出: "apple"示例 2:输入:s = "abpcplea", d = ["a","b","c"]输出: "a"fun原创 2021-04-11 22:13:46 · 92 阅读 · 0 评论 -
go语言刷题:455. 分发饼干
455. 分发饼干示例 1:输入: g = [1,2,3], s = [1,1]输出: 1解释: 你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。所以你应该输出1。示例 2:输入: g = [1,2], s = [1,2,3]输出: 2解释: 你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。你拥有的饼干数量和尺寸都足以让所有孩子满足。所以你应该输出2.func findConte原创 2021-04-17 16:30:50 · 83 阅读 · 0 评论 -
go语言刷题:452. 用最少数量的箭引爆气球
452. 用最少数量的箭引爆气球示例 1:输入:points = [[10,16],[2,8],[1,6],[7,12]]输出:2解释:对于该样例,x = 6 可以射爆 [2,8],[1,6] 两个气球,以及 x = 11 射爆另外两个气球示例 2:输入:points = [[1,2],[3,4],[5,6],[7,8]]输出:4示例 3:输入:points = [[1,2],[2,3],[3,4],[4,5]]输出:2示例 4:输入:points = [[1,2]]输出:原创 2021-04-17 20:04:20 · 75 阅读 · 0 评论 -
go语言刷题:451. 根据字符出现频率排序
451. 根据字符出现频率排序给定一个字符串,请将字符串里的字符按照出现的频率降序排列。示例 1:输入:"tree"输出:"eert"解释:'e'出现两次,'r'和't'都只出现一次。因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。示例 2:输入:"cccaaa"输出:"cccaaa"解释:'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。注意"cacaca"是不正确的,因为相同的字母必须放在一起。示例 3:原创 2021-04-14 22:14:44 · 179 阅读 · 0 评论 -
go语言刷题:435. 无重叠区间
435. 无重叠区间1.先计算最多能组成的不重叠区间个数,然后用区间总个数减去不重叠区间的个数。2.在每次选择中,区间的结尾最为重要,选择的区间结尾越小,留给后面的区间的空间越大,那么后面能够选择的区间个数也就越大。3.按区间的结尾进行排序,每次选择结尾最小,并且和前一个区间不重叠的区间给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [原创 2021-04-17 19:44:29 · 234 阅读 · 0 评论 -
go语言刷题:417. 太平洋大西洋水流问题
题目有一个 m × n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights , heights[r][c] 表示坐标 (r, c) 上单元格 高于海平面的高度 。岛上雨水较多,如果相邻单元格的高度 小于或等于 当前单元格的高度,雨水可以直接向北、南、东、西流向相邻单元格。水可以从海洋附近的任何单元格流入海洋。返回 网格坐标 res.原创 2022-04-09 17:21:07 · 515 阅读 · 0 评论 -
go语言刷题:406. 根据身高重建队列
406. 根据身高重建队列示例 1:输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]解释:编号为 0 的人身高为 5 ,没有身高更高或者相同的人排在他前面。编号为 1 的人身高为 7 ,没有身高更高或者相同的人排在他前面。编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。编号为 3 的人身高为 6 ,有 1 个身原创 2021-04-18 14:32:45 · 144 阅读 · 0 评论 -
go语言刷题:392. 判断子序列
392. 判断子序列注:"ace"是"abcde"的一个子序列,而"aec"不是示例 1:输入:s = "abc", t = "ahbgdc"输出:true示例 2:输入:s = "axc", t = "ahbgdc"输出:falsefunc isSubsequence(s string, t string) bool { //记录字符串长度 lenth := len(s) //判断字符长度<1的情况 if lenth <= 1 && string原创 2021-04-18 19:59:17 · 94 阅读 · 0 评论 -
go语言刷题:347. 前 K 个高频元素
347. 前 K 个高频元素给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]func topKFrequent(nums []int, k int) []int { //nums [1, 1, 4, 2, 2, 3] //创建map bucketmap := make(map[int]int) //初始化最大值原创 2021-04-14 20:47:29 · 311 阅读 · 1 评论 -
go语言刷题:345. 反转字符串中的元音字母
345. 反转字符串中的元音字母编写一个函数,以字符串作为输入,反转该字符串中的元音字母示例 1:输入:"hello"输出:"holle"示例 2:输入:"leetcode"输出:"leotcedefunc reverseVowels(s string) string { //将字符串转换成字节列表,好操作 news := []byte(s) //初始化左右指针位置 left, right := 0, len(s)-1 //设置左右指针状态 lefbool, rightb原创 2021-04-11 17:20:44 · 133 阅读 · 0 评论 -
go语言刷题:279. 完全平方数
给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和11 不是。示例 1:输入:n = 12输出:3解释:12 = 4 + 4 + 4示例 2:输入:n = 13输出:2解释:13 = 4 + 9/ 方法func numSquares(n int) int { // 初始化列表 f := make([]int, n+1).原创 2022-04-04 19:48:16 · 508 阅读 · 0 评论 -
go语言刷题:278. 第一个错误的版本
278. 第一个错误的版本假设有 n 个版本 [1, 2, …, n],想找出导致之后所有版本出错的第一个错误的版本。可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。应该尽量减少对调用 API 的次数。示例:给定 n = 5,并且 version = 4 是第一个错误的版本。调用 isBadVersion(3) -> false调用 isBadVersion(5) ->原创 2021-04-20 21:37:15 · 112 阅读 · 0 评论 -
go语言刷题:257. 二叉树的所有路径
题目:给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。注:叶子节点 是指没有子节点的节点。示例 1:输入:root = [1,2,3,null,5]输出:[“1->2->5”,“1->3”]示例 2:输入:root = [1]输出:[“1”]代码:func binaryTreePaths(root *TreeNode) []string { // 如果根节点为空,则返回空节点 if root == nil { return原创 2022-05-30 16:33:24 · 224 阅读 · 0 评论 -
go语言刷题:241. 为运算表达式设计优先级
241. 为运算表达式设计优先级import ( "fmt" "strconv")func diffWaysToCompute(input string) []int { // 如果是数字,直接返回 if isDigit(input) { tmp, _ := strconv.Atoi(input) return []int{tmp} } // 空切片 var res []int // 遍历字符原创 2021-07-18 11:46:24 · 100 阅读 · 0 评论 -
go语言刷题:206. 反转链表
题目反转一个单链表示例1:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL代码type ListNode struct { Val int Next *ListNode} func reverseList(head *ListNode) *ListNode { //设置空节点 var pre *ListNode for head != nil {原创 2021-04-09 15:13:48 · 157 阅读 · 0 评论 -
go语言刷题:167. 两数之和 II - 输入有序数组
167. 两数之和 II - 输入有序数组题目描述:在有序数组中找出两个数,使它们的和为 target。使用双指针,一个指针指向值较小的元素,一个指针指向值较大的元素。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。如果两个指针指向元素的和 sum == target,那么得到要求的结果;如果 sum > target,移动较大的元素,使 sum 变小一些;如果 sum < target,移动较小的元素,使 sum 变大一些。func twoSum(numbers [原创 2021-04-11 14:41:35 · 95 阅读 · 0 评论 -
go语言刷题:153. 寻找旋转排序数组中的最小值
153. 寻找旋转排序数组中的最小值示例 1:输入:nums = [3,4,5,1,2]输出:1解释:原数组为 [1,2,3,4,5] ,旋转 3 次得到输入数组。示例 2:输入:nums = [4,5,6,7,0,1,2]输出:0解释:原数组为 [0,1,2,4,5,6,7] ,旋转 4 次得到输入数组。示例 3:输入:nums = [11,13,15,17]输出:11解释:原数组为 [11,13,15,17] ,旋转 4 次得到输入数组。//二分法func fin原创 2021-04-20 22:43:03 · 117 阅读 · 0 评论 -
go语言刷题:141. 环形链表
141. 环形链表如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。**注意:**为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环,pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], po原创 2021-04-11 19:13:00 · 81 阅读 · 0 评论 -
go语言刷题:130. 被围绕的区域
题目给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例 1:输入:board =[[“X”,“X”,“X”,“X”],[“X”,“O”,“O”,“X”],[“X”,“X”,“O”,“X”],[“X”,“O”,“X”,“X”]]输出:[[“X”,“X”,“X”,“X”],[“X”,“X”,“X”,“X”],[“X”,“X”,“X”,“X”],[“X”,“O”,“X”,“X”]]解.原创 2022-04-08 08:56:03 · 125 阅读 · 0 评论 -
go语言刷题:127. 单词接龙
题目字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> … -> sk:每一对相邻的单词只差一个字母。对于 1 <= i <= k 时,每个 si 都在 wordList 中。注意, beginWord 不需要在 wordList 中。sk == endWord给你两个单词 beginWord 和 endWord 和一个字典 wordList ,.原创 2022-04-05 15:57:59 · 572 阅读 · 0 评论 -
go语言刷题:122. 买卖股票的最佳时机 II
122. 买卖股票的最佳时机 II示例 1:输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。示例 2:输入: prices = [1,2,3,4,5]输出: 4解释: 在第 1 天(股原创 2021-04-18 17:18:59 · 116 阅读 · 0 评论 -
go语言刷题:121. 买卖股票的最佳时机
121. 买卖股票的最佳时机示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。示例 2:输入:prices = [7,6,4,3,1]输出:0解释:在这种情况下, 没有交易完成, 所以最大利润为 0。思路:只要记录前面的最小价格,将这个最小价格作为买入价原创 2021-04-18 16:55:59 · 176 阅读 · 0 评论 -
go语言刷题:100. 相同的树
题目两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的示例 1:输入:p = [1,2,3], q = [1,2,3]输出:true示例 2:输入:p = [1,2], q = [1,null,2]输出:false示例 3:输入:p = [1,2,1], q = [1,1,2]输出:false代码func isSameTree(p *TreeNode, q *TreeNode) bool {原创 2021-03-18 14:59:29 · 124 阅读 · 0 评论 -
go语言刷题:98. 验证二叉搜索树
申明:本文只用做自己的学习记录题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。根节点的值为 5 ,但是其右子节点值为 4代码func isV原创 2021-03-18 14:20:02 · 135 阅读 · 0 评论 -
go语言刷题:95. 不同的二叉搜索树 II
给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。示例 1:输入:n = 3输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]示例 2:输入:n = 1输出:[[1]]解决方法func generateTrees(n int) []*TreeNode { if n == 0 { r原创 2022-03-18 09:56:13 · 72 阅读 · 0 评论 -
go语言刷题:93. 复原 IP 地址
申明:本文只用做自己的学习记录题目给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。示例 1:输入:s = “2552551原创 2021-03-12 10:05:03 · 211 阅读 · 0 评论 -
go语言刷题:92. 反转链表 II
申明:本文只用做自己的学习记录题目给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表示例 1:输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]示例 2:输入:head = [5], left = 1, right = 1输出:[5]代码type ListNode struct {原创 2021-03-25 15:57:38 · 165 阅读 · 0 评论 -
go语言刷题:90. 子集 II
申明:本文只用做自己的学习记录题目给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[[2],[1],[1,2,2],[2,2],[1,2],[]]代码...原创 2021-03-17 21:27:22 · 216 阅读 · 0 评论 -
go语言刷题:88. 合并两个有序数组
申明:本文只用做自己的学习记录题目两个有序整数数组 nums1 和 nums2,请将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例 2:输入:n原创 2021-03-28 17:17:15 · 592 阅读 · 0 评论 -
go语言刷题:83. 删除排序链表中的重复元素
申明:本文只用做自己的学习记录题目存在一个按升序排列的链表,给出这个链表的头节点 head ,请删除所有重复的元素,使每个元素 只出现一次返回同样按升序排列的结果链表示例 1:输入:head = [1,1,2]输出:[1,2]示例 2:输入:head = [1,1,2,3,3]输出:[1,2,3]代码type ListNode struct { Val int Next *ListNode}func deleteDuplicates(head *ListNode) *Lis原创 2021-03-27 20:53:04 · 175 阅读 · 1 评论 -
go语言刷题:82. 删除排序链表中的重复元素 II
申明:本文只用做自己的学习记录题目存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。示例 1:输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]示例 2:输入:head = [1,1,1,2,3]输出:[2,3]代码func deleteDuplicates(head *ListNode) *ListNode { //判断边界条件 if h原创 2021-03-26 19:50:27 · 157 阅读 · 0 评论