![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
优选算法
文章平均质量分 76
holo.yj
这个作者很懒,什么都没留下…
展开
-
【优选算法】 - 6.碰撞指针:找总价格为目标值的两个商品
在今天的文章中,我们将解决一个与数组操作相关的经典算法问题——在有序数组中查找和为特定值的两个元素。这个问题通常出现在各种编程竞赛和算法面试中,要求我们在一个已排序的数组中找出两个数,它们的和等于给定的目标值。一个指针指向数组的起始位置,另一个指针指向数组的末尾位置。输入:price = [8, 21, 27, 34, 52, 66], target = 61。根据两个指针所指向的元素之和与目标值的大小关系,移动左指针或右指针来逼近目标值。如果和小于目标值,说明需要增加和的值,因此左指针向右移动。原创 2024-08-27 22:44:28 · 409 阅读 · 0 评论 -
【优选算法】 - 5.碰撞指针: 有效三角形的个数
具体地,我们固定最长边(即数组末尾的元素),然后使用两个指针(左指针和右指针)分别指向起始位置和次末尾位置,根据当前最长边与左右两边之和的关系移动指针。这样,当我们固定一个“最长边”(实际上是当前考虑的三个数中的最大数),然后寻找能与它组成三角形的其他两边时,我们就可以利用排序后的数组特性来优化搜索过程。综上所述,先排序是解决“有效三角形的个数”问题的一个关键步骤,它允许我们利用三角形的性质、减少不必要的比较、优化搜索空间,并简化算法的实现逻辑。思路2:先排序,后碰撞指针,如下图所示。原创 2024-08-26 22:17:11 · 611 阅读 · 0 评论 -
【优选算法】 - 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 阅读 · 0 评论 -
【优选算法】 - 3.快慢双指针:快乐数
这个数字小于9,999,999,999,后者每个位置数字的平方和为810,因此在本题中可能的整数,他的平方和永远≤810,根据鸽巢原理,第811次循环必定会有一个重复的数字,因此本题的“每个位置数字的平方和”的计算不可能出现无限不循环的现象,快乐数的定义是:一个正整数,通过重复将其各个位上的数字的平方和作为新的数,最终能够变为1的数。该原理的基本思想是,如果有n个物体需要放入m个容器中,且n大于m,那么至少有一个容器必须包含两个或更多的物体。3.判断快慢指针相遇时的值是否为1:是:快乐数,否:不是快乐数。原创 2024-08-25 22:01:58 · 804 阅读 · 0 评论 -
【优选算法】 - 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 阅读 · 0 评论 -
【优选算法】 - 1.双指针技巧:移动零
在今天的文章中,我们将探讨一个经典的算法问题——。这个问题要求我们将数组中的所有零移动到数组的末尾,同时保持非零元素的相对顺序不变。我们将使用双指针技巧来解决这个问题,这是一种在处理数组或链表时非常高效的方法。原创 2024-08-18 16:59:57 · 409 阅读 · 0 评论