
算法
文章平均质量分 69
ChaHae-In
大一捏^ ^
展开
-
算法_双指针_盛最多水的容器
定义两个指针left和right,left初始位于最左侧,向右移,right位于最右侧,向左移,最开始得到一个V1,之后left和right谁指的数较小,谁移动,移动后得到V2,每得到一个体积就更新一下最大值,两指针相遇后剩下的值就是最大V。此时盛水高度为4(这个高度由两壁中较短的来决定),盛水长度为3,能盛水量为3×4=12。利用单调性,让双指针分别从左右两侧向内遍历一遍数组,在得到的几个V中选择最大的那个V即可。接下来向内进行枚举,假设左壁6(较高一侧的壁)不变,右壁向内枚举的过程中。原创 2024-12-19 14:44:03 · 238 阅读 · 0 评论 -
算法_双指针_快乐数
2的31次方是21亿多,21亿是个十位数,我们知道9的次方是最大的,选一个最大的十位数9999999999将每一位平方后相加结果为810.也就是说n在循环中产生的数字范围为【1,810】一共810个数字。不要被指针所限制,双指针只是一种思想,并不是传统意义上的指针,这里slow指针走一步,我们就将数字处理一次,fast指针走两步,就将数字处理两次,相当于就是修改了指针,让它指向了变化后的数字。题目中已经说了这个数要么变为1.要么无限循环(为什么会循环会在拓展中讲到,这里的无限循环是不包括1的)原创 2024-12-17 23:11:36 · 325 阅读 · 0 评论 -
算法_双指针_复写零
我们发现问题,当cur遇到0时,dest需要将0,2都改写成零,会把原来的2覆盖,往后所有元素都会变成零。我们试试从右向左,dest需要写完整个数组,容易想到初始位置在最后边,同时我们将cur初始位置设置在最后一个需要复写的数字上,本题中为4。这里dest定义为-1位置,因为dest作为结果中最后一个需要复写的数的位置,刚开始不知道那个数在哪,所以dest初始位置-1.所以需要考虑一下边界情况,我们发生越界一定是最后一个要复写的数为0,有可能复写到数组外面,越界一定是cur为0导致的。原创 2024-12-14 23:54:32 · 632 阅读 · 0 评论 -
算法_双指针_移动零
这里的dest指针的作用就是一个分割线,相当于左边处理过的区间又被dest分为两个小区间,这两个指针加起来将数组划分为三个区间[0,dest],[dest+1,cur-1],[cur,n-1]。我们定义两个指针,一个为dest,另一个为cur。我们将其归为数组划分这类题中:给了我们一个数组,给了我们一个规则,让我们将数组划分为几个区间。dest:已处理区间内,非零元素的最后一个位置,意思是处理过后dest左边区间的全部为非零元素。本题就是将数组划分为两个区间,一个区间为零,另一个区间为非零元素。原创 2024-12-13 23:54:31 · 422 阅读 · 0 评论