Day 11
Date: October 6, 2022 11:41 AM
LinkedIn: https://leetcode.cn/problems/three-equal-parts/
Title: 三等分
class Solution:
def threeEqualParts(self, arr: List[int]) -> List[int]:
def findIndex(x): # 找到累积到x时对应的下标
count=0
for i, v in enumerate(arr): # enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标。
count+=v
if count == x:
return i
n = len(arr)
cnt, mod = divmod(sum(arr),3) # divmod()的返回值与(a // b,x%y)相同。
if mod: # 除不尽 无法分成三个部分
return [-1, -1]
if cnt == 0: # 只有0
return [0, n-1]
i, j, k = findIndex(1), findIndex(cnt+1), findIndex(cnt*2+1) #找到三个部分的第一个数的下标
while k < n and arr[i]==arr[j]==arr[k]: # 判断每个部分数是否相等
k+=1
j+=1
i+=1
if k==n:
return [i-1, j]
else:
return [-1, -1]
运用了python的两个函数enumerate()与divmod()
- enumerate() 函数属于python的内置函数之一,用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
- enumerate(sequence, [start=0])
- sequence – 一个序列、迭代器或其他支持迭代对象。
- • start – 下标起始位置。
- enumerate(sequence, [start=0])
- divmod()方法采用两个参数值,并返回由它们的商和余数组成的一对数字(元组)。
- divmod(x, y)
- x-一个非复数(分子),y-一个非复数(分母)
- 如果x和y是整数,则divmod()的返回值与(a // b,x%y)相同。
- 如果x或y的值为浮点型,则结果为(q,x%y)。 (q是商的整个部分)
- divmod(x, y)