代码随想录算法训练营第三十三天 | leetcode 1005. K 次取反后最大化的数组和,134. 加油站,135. 分发糖果)
创始人
2024-05-26 01:57:48
0

代码随想录算法训练营第三十三天 | leetcode 1005. K 次取反后最大化的数组和,134. 加油站,135. 分发糖果

  • 1005. K 次取反后最大化的数组和
  • 134. 加油站
  • 135. 分发糖果

1005. K 次取反后最大化的数组和

题目:
给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)
以这种方式修改数组后,返回数组可能的最大和。

题目链接:1005. K 次取反后最大化的数组和

class Solution:def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:A = sorted(nums, key = abs, reverse = True) # # 将A按绝对值从大到小排列for i in range(len(A)):if k > 0 and A[i] < 0:A[i] *= -1k -= 1if k > 0:A[-1] *= (-1) ** k # 若全部取反后,k仍不为0,将最小的数字反复取反return sum(A)

134. 加油站

题目:
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。
你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。
如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。

题目链接:134. 加油站

思路记录:
如果总油量减去总消耗大于等于0那么一定可以跑完一圈。剩油量rest[i]相加一定大于等于0。i从0开始累计rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。
局部最优:当前累加rest[i]的和curSum一旦小于0,起始位置至少要是i+1,因为从i之前开始一定不行。全局最优:找到可以跑一圈的起始位置。

class Solution:def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:curSum, totalSum, start = 0, 0, 0for i in range(len(gas)):curSum += gas[i] - cost[i]totalSum += gas[i] - cost[i]if curSum < 0:start = i + 1 # 当前累加rest[i]和 curSum一旦小于0,更新起始位置i+1curSum = 0 # curSum从0开始if totalSum < 0:return -1return start

135. 分发糖果

题目:
老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。
你需要按照以下要求,帮助老师给这些孩子分发糖果:
每个孩子至少分配到 1 个糖果。
相邻的孩子中,评分高的孩子必须获得更多的糖果。
那么这样下来,老师至少需要准备多少颗糖果呢?

题目链接:135. 分发糖果

class Solution:def candy(self, ratings: List[int]) -> int:candyVec = [1] * len(ratings) # 初始化,确保每个孩子至少有一个糖果for i in range(1, len(ratings)): # 先确定右边评分大于左边评分的情况,从前往后遍历if ratings[i] > ratings[i - 1]:candyVec[i] = candyVec[i - 1] + 1for j in range(len(ratings) - 2, -1, -1): # 再确定左边评分大于右边评分的情况if ratings[j] > ratings[j + 1]:candyVec[j] = max(candyVec[j], candyVec[j + 1] + 1)return sum(candyVec)

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...