leetcode3115(每日一题)
时间复杂度O(n)
空间复杂度O(1)
先把1-100中的质数选出来,然后双指针i,j左右指针寻找mi,ma也就是最大索引和最小索引,最后返回最大减最小。
class Solution:
def maximumPrimeDifference(self, nums: List[int]) -> int:
sushu = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
sushu = set(sushu)
i,j = 0,len(nums) - 1
mi = ma = -1
while i <= j:
if nums[i] in sushu:
mi = i
else:
i += 1
if nums[j] in sushu:
ma = j
else:
j -= 1
if mi != -1 and ma != -1:
break
return ma - mi
leetcode3196(周赛403)
3196. 最大化子数组的总成本 - 力扣(LeetCode)
该题需要知道最后的结果只有两种可能,要么是+要么是+-,所以我们就找这两个的最大值,每次向后都要找到这个位置的最大值。
时间复杂度:O(N)
空间复杂度:O(N)
class Solution:
def maximumTotalCost(self, nums: List[int]) -> int:
n = len(nums)
f = [0] * (n + 1)
f[1] = nums[0]
for i in range(1, n):
f[i + 1] = max(f[i] + nums[i], f[i - 1] + nums[i - 1] - nums[i])
return f[n]
leetcode163(会员题)
要做这道题
时间复杂度:O(nlogn)
空间复杂度:O(n)
class Solution:
def findMissingRanges(self, nums: [int], lower: int, upper: int) -> [str]:
ans = []
nums.append(lower - 1)
nums.append(upper + 1)
nums = list(set(nums))
nums.sort()
for i in range(1,len(nums)):
if nums[i] - nums[i - 1] > 1:
ans.append([nums[i - 1] + 1,nums[i] - 1])
return ans
先把两个边界加到数组里面,但是我们要注意,边界也是可以取的所以lower-1,upper+1,然后再把重复的数删除一下,然后再进行排序,然后从第1个索引开始遍历,把遍历的结果加到ans里面,返回ans。