当前位置: 首页 > 后端技术 > Python

LeetCode把数组分成三等分

时间:2023-03-26 18:28:34 Python

把数组分成三等分来源:https://leetcode-cn.com/problems/partition-array-into-three-parts-with-equal-sum/topic解题思路直接遍历思路:直接遍历搜索。先处理特殊情况,当和不能被3整除时,直接返回False。定义变量符号,当遍历累加值等于三等分时,加1,作为达到平均值的次数的计数。当符号值大于等于3时,返回True,表示和可以三等分。这里的sign大于等于3,因为有特殊情况,例如:[1,-1,1,-1,-1,1,1,-1]遇到这种情况时,sign不等于到3,但这个数组也可以平均分为三分之一。双指针思想:双指针。也先处理特殊情况,同上。定义左右指针left、right,左指针指向开头,右指针指向结尾。从数组的两边一起搜索。定义左边部分的和为left_sum,右边部分的和为right_sum,初始值为指针指向的索引对应的数组的值。当left_sum的值不等于thirds的值时,指针向右移动进行累加;当right_sum的值不等于thirds的值时,指针向左移动进行累加。这里有个约束条件,就是left+1bool:#排除特殊情况s=sum(A)ifs%3!=0:returnFalse#定义符号统计和达到目标值的次数sign=0third=s//3res=0fornuminA:res+=num#当和等于目标值时,sign+1,并重置变量res同时求和ifres==third:sign+=1res=0#这是为了排除特殊情况如[1,-1,1,-1,-1,1,1,-1]#符号不一定等于3returnsign>=3Code(doublepointer)classSolution:defcanThreePartsEqualSum(self,A:List[int])->bool:#排除特殊情况s=sum(A)ifs%3!=0:returnFalse#定义左右指针left=0right=len(A)-1#定义左右两部分的初始值。左右指针分别指向索引对应的数组的值left_sum=A[left]right_sum=A[right]third=s//3#constraintswhileleft+1