自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 [LeetCode][Golang] 5. 最长回文子串

题目:给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"题解:首先我们使用中心扩展法解决,先贴代码(Go):func longestPalindrome(s string) string { n := len(s) if n < 2 { return s } begin, end := 0, 0 //

2022-04-24 18:23:28 464

原创 [LeetCode][Golang] 647. 回文子串

题目:给你一个字符串 s ,请你统计并返回这个字符串中 回文子串的数目。回文字符串是正着读和倒过来读一样的字符串。子字符串是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例:输入: s = "aaa"输出: 6解释: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa"1 <= s.length <= 1000s 由小写英文字母组成题解概述:本题目有两种解题思路,分别是:

2022-04-23 20:08:53 447

原创 [Golang] 《算法导论》动态规划(Dynamic Programming)理解 (一)

本篇内容为阅读《算法导论》动态规划算法设计时的一些理解和记录。建议大家去看原书,真的好。动态规划有点像分治法,都是通过合并原问题的子问题的解来得到原问题的解。不同的是分治法将原问题划分为不相交的子问题,递归地解决子问题,然后组合它们的解来得到原问题的解。而动态规划需要原问题划分为有重叠的子问题,即其子问题又需要共同的子子问题。当划分的子问题有重叠时,使用分治法会导致重叠子问题的重复计算。动态规划实际上就是通过存储子问题的解来避免这样的重复计算,这是动态规划的基本思想。动态规划一般用于求一个最优解的问题

2022-04-21 22:25:57 218

原创 [LeetCode][Golang] 56. 合并区间

题目:以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。示例:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].1 <= intervals.length

2022-04-20 17:04:29 270

原创 [LeetCode][Golang] 209. 长度最小的子数组

题目:给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0。1 <= target <= 1091 <= nums.length <= 1051 <= nums[i] <= 105题解一:滑动窗口可以很好的解决。先贴代码(Go):fu

2022-04-19 17:59:53 959

原创 [LeetCode][Golang] 167. 两数之和 II - 输入有序数组

题目:给你一个下标从 1 开始的整数数组 numbers ,该数组已按非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。你可以假设

2022-04-18 23:23:27 193

原创 [LeetCode][Golang] 88.合并两个有序数组

题目:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。nums1.length == m

2022-04-18 18:40:08 438

原创 [LeetCode][Golang] 215. 数组中的第K个最大元素

题目:给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。1 <= k <= nums.length <= 104-104 <= nums[i] <= 104本算法题目有两种比较好的方法,分别为使用小顶堆和使用快速选择。题解一:首先我们使用小顶堆的方法求解,先贴代码(Go语言):type IntHeap []intfunc (h IntHeap)

2022-04-18 17:30:27 684

原创 Go语言实现快速排序(QuickSort)

快速排序(QuickSort) 作为最流行的排序算法之一,又有非常出色的性能,被广大的编程语言作为标准库默认排序方法。快速排序的设计思想是一个很好的分治法(divide-and-conquer) 的实例,理解他的实现原理将有助于我们在实际生产过程中设计自己的解决问题的算法。最直接的,很多算法题目需要使用到类似的思想。先贴代码(Go):func quickSort(nums []int, l, r int) { //[l,r] if l < r { m := partition(

2022-04-18 13:46:15 4744 3

原创 循环不变量(loop invariant)的理解

在计算机科学中,循环不变量(loop invariant),是一组在循环体内、每次迭代均保持为真的某种性质,通常被用来证明程序或算法的正确性。理解循环不变量这个概念对我们理解算法过程,和解决算法问题有很大的帮助。下面参考《算法导论》,对循环不变量的概念进行详细的解释。我们使用循环不变量帮助我们理解一个算法为什么是对的。对于一个给定的循环不变量,我们必须遵循以下三个属性:初始化: 在循环的第一次迭代之前,循环不变量为真。保持: 如果在循环的一次迭代之前循环不变量为真,那么在下一次迭代之前循环不变量同

2022-04-17 15:17:06 3374

原创 [LeetCode][Golang] 75. 颜色分类

题目:给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库的sort函数的情况下解决这个问题。示例:输入: nums = [2,0,2,1,1,0]输出: [0,0,1,1,2,2]n == nums.length1 <= n <= 300nums[i] 为&nbsp

2022-04-13 22:15:57 86

原创 [LeetCode][Golang] 80. 删除有序数组中的重复项 II

题目:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。1 <= nums.length <= 3 * 104-104 <= nums[i] <= 104nums 已按升序排列题解:首先,这是一道数组类的简单算法题。我们明确循环不变式(loop invariant)的概念,即一组在循环体内

2022-04-13 10:38:43 164

原创 [LeetCode][Golang] 26. 删除有序数组中的重复项

题目:给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间

2022-04-13 10:37:50 316

原创 [LeetCode][Golang] 27.移除元素

题目:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素0 <= nums.length <= 1000 <= nums[i] <= 500 <= val <= 100题解:首先,这是一道数组类的简单算法题。我们明确循环不

2022-04-13 10:36:50 986

原创 [LeetCode][Golang] 283.移动零

题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。1 <= nums.length <= 104-231 <= nums[i] <= 231 - 1题解:首先,这是一道数组类的简单算法题。我们明确循环不变式(loop invariant)的概念,即一组在循环体内、每次迭代均保持为真的性质。先贴代码:(GO

2022-04-13 10:35:01 433

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除