自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2024-08-27 22:44:28 409

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

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

2024-08-26 22:17:11 611

原创 【优选算法】 - 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 466

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

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

2024-08-25 22:01:58 804

原创 【优选算法】 - 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 435

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

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

2024-08-18 16:59:57 409

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

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

2024-08-16 21:28:52 356 1

空空如也

空空如也

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

TA关注的人

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