给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。
子数组 定义为原数组中的一个连续子序列。
#方法一:前缀和+双指针
def sumOddLengthSubarrays(arr):
preSum=[0 for i in range(len(arr)+1)] #构建前缀和数组
res=0
for i in range(1,len(arr)+1):
preSum[i]=preSum[i-1]+arr[i-1]
left,right=0,0 #左右指针
while left
有一个自行车手打算进行一场公路骑行,这条路线总共由 n + 1 个不同海拔的点组成。自行车手从海拔为 0 的点 0 开始骑行。
给你一个长度为 n 的整数数组 gain ,其中 gain[i] 是点 i 和点 i + 1 的 净海拔高度差(0 <= i < n)。请你返回 最高点的海拔 。
#方法一:前缀和
def largestAltitude(gain):
preSum=[0 for i in range(len(gain)+1)] #前缀和数组
for i in range(1,len(gain) +1):
preSum[i]=preSum[i-1]+gain[i-1]
return max(preSum)
给你一个二维整数数组 ranges 和两个整数 left 和 right 。每个 ranges[i] = [starti, endi] 表示一个从 starti 到 endi 的 闭区间 。
如果闭区间 [left, right] 内每个整数都被 ranges 中 至少一个 区间覆盖,那么请你返回 true ,否则返回 false 。
已知区间 ranges[i] = [starti, endi] ,如果整数 x 满足 starti <= x <= endi ,那么我们称整数x 被覆盖了。
#方法一:暴力求解
def isCovered(ranges,left,right):
for x in range(left,right+1): #逐个遍历区间
flag=False #标记
for l,r in ranges:
if l<=x<=r: #判断该数字是否在ranges里面,有没有被覆盖
flag=True
break
if not flag: #没有被覆盖直接return
return False
return True
给你一个下标从 0 开始的整数数组 nums ,请你找到 最左边 的中间位置 middleIndex (也就是所有可能中间位置下标最小的一个)。
中间位置 middleIndex 是满足 nums[0] + nums[1] + ... + nums[middleIndex-1] == nums[middleIndex+1] + nums[middleIndex+2] + ... + nums[nums.length-1] 的数组下标。
如果 middleIndex == 0 ,左边部分的和定义为 0 。类似的,如果 middleIndex == nums.length - 1 ,右边部分的和定义为 0 。
请你返回满足上述条件 最左边 的 middleIndex ,如果不存在这样的中间位置,请你返回 -1 。
#方法一:前缀和
def findMiddleIndex(nums):
preSum=[0 for i in range(len(nums)+1)]
for i in range(1,len(nums) +1):
preSum[i]=preSum[i-1]+nums[i-1] #前缀和数组
for i in range(len(nums)):
if preSum[i] == preSum[len(nums)]-preSum[i+1]:
return i #找到了
return -1 #没找到