python
class Solution:
def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:
res = 0
nums.sort()
min_num = float('inf')
for i in range(len(nums)):
if nums[i] >= 0:
res += nums[i]
min_num = min(min_num, nums[i])
else:
if k > 0:
res += nums[i] * -1
k -= 1
min_num = min(min_num, -1 * nums[i])
else:
res += nums[i]
if k > 0 and k % 2:
res -= 2 * min_num
return res
python
class Solution:
def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
total_sum = 0 # 记录总剩余油量
start = 0 # 汽车开始位置
cur_sum = 0 # 从start开始的当前剩余油量
n = len(gas)
for i in range(n):
dif = gas[i] - cost[i]
total_sum += dif
cur_sum += dif
if cur_sum < 0:
start = i + 1
cur_sum = 0
if total_sum < 0:
return -1
return start
python
class Solution:
def candy(self, ratings: List[int]) -> int:
n = len(ratings)
candies = [1] * n
# 1. 从左向右遍历:处理右边比左边评分高的情况
for i in range(1, n):
if ratings[i] > ratings[i - 1]:
candies[i] = candies[i - 1] + 1
# 2. 从右向左遍历:处理左边比右边评分高的情况
for i in range(n - 2, -1, -1):
if ratings[i] > ratings[i + 1]:
# 贪心:取最大值以同时满足左右约束
candies[i] = max(candies[i], candies[i + 1] + 1)
return sum(candies)