自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 视频下载修改指令

1

2025-03-20 15:03:43 287

原创 【优选算法】 - 12.滑动窗口:将x减到0的最小操作

每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。这个问题不仅涉及到数组的基本操作,还涉及到对操作次数的优化,是一个很好的练习,可以帮助我们提高在实际编程过程中遇到类似问题时的解决能力。解释:最佳解决方案是移除后三个元素和前两个元素(总共 5 次操作),将 x 减到 0。输入:nums = [3,2,20,1,1,3], x = 10。输入:nums = [1,1,4,2,3], x = 5。输入:nums = [5,6,7,8,9], x = 4。

2024-09-06 21:45:25 644

原创 【优选算法】 - 11.滑动窗口:最大连续1的个数③

这个问题要求我们在一个二进制数组(即只包含0和1的数组)中,通过翻转最多k个0为1,来找出最长的连续1子数组的长度。给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数。输入:nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3。输入:nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2。解释:[1,1,1,0,0,思路2:滑动窗口,如下图所示。解释:[0,0,1,1,

2024-09-02 16:15:45 1005

原创 【优选算法】 - 10.滑动窗口:⽆重复字符的最⻓⼦串

为了高效地解决这个问题,我们通常采用滑动窗口的方法,它能够在一次遍历中找出满足条件的最长子串,极大地提升了算法的效率。这段代码通过滑动窗口和哈希表的高效结合,实现了对无重复字符最长子串长度的快速求解。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。输入: s = “abcabcbb”

2024-09-02 14:40:49 945

原创 【优选算法】 - 9.滑动窗口:长度最小的子数组

在今天的文章中,我们将聚焦于一个既经典又具挑战性的算法问题——寻找长度最小的子数组,其和大于等于给定目标值。这个问题要求我们在一个整数数组中寻找一个最短的连续子数组,使得该子数组中所有元素的和至少等于一个给定的目标值。这段代码有效地实现了滑动窗口技术,通过双指针在数组上滑动,不断调整子数组的大小,直到找到满足条件的最小子数组或遍历完整个数组。输入:target = 11, nums = [1,1,1,1,1,1,1,1]输入:target = 7, nums = [2,3,1,2,4,3]

2024-08-30 22:51:09 936

原创 【优选算法】 - 8.碰撞指针:四数之和

不同于常见的两数之和或三数之和问题,四数之和要求我们在一个整数数组中找到所有独特的四元组组合,使得这四个数的和恰好等于给定的目标值。排序能够让我们在遍历过程中快速跳过重复元素,而双指针法则能在已排序的数组上高效地寻找满足条件的两个数对,从而大大缩减了搜索空间。输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]输入:nums = [1,0,-1,0,-2,2], target = 0。输入:nums = [2,2,2,2,2], target = 8。输出:[[2,2,2,2]]

2024-08-28 19:53:05 868

原创 【优选算法】 - 7.碰撞指针:三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。③ 双指针:在固定了 nums[i] 之后,使用两个指针 left 和 right 分别在 i 的右侧和数组的末尾进行移动,寻找满足 nums[i] + nums[left] + nums[right] == 0 的 left 和 right。输出:[[-1,-1,2],[-1,0,1]]

2024-08-28 18:49:53 833 1

原创 【优选算法】 - 6.碰撞指针:找总价格为目标值的两个商品

在今天的文章中,我们将解决一个与数组操作相关的经典算法问题——在有序数组中查找和为特定值的两个元素。这个问题通常出现在各种编程竞赛和算法面试中,要求我们在一个已排序的数组中找出两个数,它们的和等于给定的目标值。一个指针指向数组的起始位置,另一个指针指向数组的末尾位置。输入:price = [8, 21, 27, 34, 52, 66], target = 61。根据两个指针所指向的元素之和与目标值的大小关系,移动左指针或右指针来逼近目标值。如果和小于目标值,说明需要增加和的值,因此左指针向右移动。

2024-08-27 22:44:28 590

原创 【优选算法】 - 5.碰撞指针: 有效三角形的个数

具体地,我们固定最长边(即数组末尾的元素),然后使用两个指针(左指针和右指针)分别指向起始位置和次末尾位置,根据当前最长边与左右两边之和的关系移动指针。这样,当我们固定一个“最长边”(实际上是当前考虑的三个数中的最大数),然后寻找能与它组成三角形的其他两边时,我们就可以利用排序后的数组特性来优化搜索过程。综上所述,先排序是解决“有效三角形的个数”问题的一个关键步骤,它允许我们利用三角形的性质、减少不必要的比较、优化搜索空间,并简化算法的实现逻辑。思路2:先排序,后碰撞指针,如下图所示。

2024-08-26 22:17:11 1027

原创 【优选算法】 - 4.碰撞指针:盛水最多的容器

我们初始化两个指针分别指向数组的首尾,然后比较两端的高度,选择较短的那一端向内移动(因为较短的那一端限制了容器的容量,而移动它可能找到更高的边界,从而增加容量)。这种方法的时间复杂度为O(n),显著提高了效率。最直接的方法是使用两层循环遍历所有可能的线对,计算它们构成的容器容量,并找到最大值。解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。这段代码通过双指针的巧妙移动,高效地解决了“盛水最多的容器”问题,展示了算法设计中的智慧与优雅。输入:[1,8,6,2,5,4,8,3,7]

2024-08-26 21:21:15 576

原创 【优选算法】 - 3.快慢双指针:快乐数

这个数字小于9,999,999,999,后者每个位置数字的平方和为810,因此在本题中可能的整数,他的平方和永远≤810,根据鸽巢原理,第811次循环必定会有一个重复的数字,因此本题的“每个位置数字的平方和”的计算不可能出现无限不循环的现象,快乐数的定义是:一个正整数,通过重复将其各个位上的数字的平方和作为新的数,最终能够变为1的数。该原理的基本思想是,如果有n个物体需要放入m个容器中,且n大于m,那么至少有一个容器必须包含两个或更多的物体。3.判断快慢指针相遇时的值是否为1:是:快乐数,否:不是快乐数。

2024-08-25 22:01:58 1146

原创 【优选算法】 - 2.复写零

想象一下,你有一个整数数组,任务是将数组中的所有零元素复制一份,并将它们以及原有的非零元素重新排列,同时保持非零元素的相对顺序不变,而且这一切都需要在数组的原址上进行,不能使用额外的数组空间。注意:请不要在超过该数组长度的位置写入元素。解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]解释:调用函数后,输入的数组将被修改为:[1,2,3]输入:arr = [1,0,2,3,0,4,5,0]输出:[1,0,0,2,3,0,0,4]输入:arr = [1,2,3]输出:[1,2,3]

2024-08-25 20:30:57 509

原创 【优选算法】 - 1.双指针技巧:移动零

在今天的文章中,我们将探讨一个经典的算法问题——。这个问题要求我们将数组中的所有零移动到数组的末尾,同时保持非零元素的相对顺序不变。我们将使用双指针技巧来解决这个问题,这是一种在处理数组或链表时非常高效的方法。

2024-08-18 16:59:57 461

原创 【排序算法】- 快速排序

在今天的文章中,我们将探讨一个经典的算法问题——“快速排序”(Quick Sort),快速排序以其高效的平均时间复杂度而闻名。快速排序是一种高效的排序算法,它采用分治法的思想,将大问题分解为小问题来解决,从而提高了排序的效率。

2024-08-16 21:28:52 408 2

空空如也

空空如也

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

TA关注的人

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