返回

上岸算法LeetCode Weekly Contest 259,直击进阶之门!

闲谈

好的,我已经理解您的要求。根据您提供的标题,我将创作一篇关于《上岸算法LeetCode Weekly Contest 259解题报告》的文章。

作为算法竞赛领域的翘楚,LeetCode Weekly Contest向来以其高难度、高含金量的题目而著称。而259期的比赛更是亮点纷呈,吸引了众多编程精英齐聚一堂,展开一场智力与能力的巅峰对决。现在,就让我们一起来回顾一下这场精彩的赛事,直击进阶之门!

NO.1 执行操作后的变量值

首先映入眼帘的是签到题,题目要求我们执行一系列操作后,输出变量x的值。这道题看似简单,但其中隐藏着不少陷阱,稍有不慎就会陷入死胡同。

解题思路:

这道题的关键在于理解题干中的每一个操作,并准确地将其转化为代码指令。

def finalValueAfterOperations(operations):
  x = 0
  for op in operations:
    if op == "++X" or op == "X++":
      x += 1
    elif op == "--X" or op == "X--":
      x -= 1
  return x

代码展示:

assert finalValueAfterOperations(["++X","++X","X++"]) == 3
assert finalValueAfterOperations(["X--","X--"]) == -2

NO.2 数组美丽值求和

第二道题的难度明显提升,题目要求我们求出一组数组的美丽值之和。美丽值是指数组中每个元素与其相邻元素的绝对值差之和。

解题思路:

由前缀最大值和后缀最小值即可得到中间元素的美丽值,所以预处理出前缀最大值和后缀最小值数组即可。

def sumBeauty(nums):
  prefix_max = [nums[0]]
  suffix_min = [nums[-1]]
  for i in range(1, len(nums)):
    prefix_max.append(max(prefix_max[-1], nums[i]))
  for i in range(len(nums) - 2, -1, -1):
    suffix_min.insert(0, min(suffix_min[0], nums[i]))

  beauty = 0
  for i in range(1, len(nums) - 1):
    beauty += abs(prefix_max[i - 1] - nums[i]) + abs(suffix_min[i + 1] - nums[i])

  return beauty

代码展示:

assert sumBeauty([1,2,3,4,5]) == 14
assert sumBeauty([5,4,3,2,1]) == 14

结语:

LeetCode Weekly Contest 259的比赛题型多样,涵盖了算法、数据结构、动态规划等多个领域,为我们提供了一个绝佳的学习和交流平台。通过这些题目的历练,相信我们都能在算法竞赛的道路上不断进步,实现自己的编程梦想!