今天的题还是比较难想到,需要培养感觉
1005. Maximize Sum Of Array After K Negations
基本思路就是先把负的变正的,再把最小的变成负的
Way1:
首先排序然后循环数组,当k>0时每次有负数则k-1并且负数变正数.之后如果k还是大于0则判断奇偶,奇数需要把最小的数变成负数,然后求和
class Solution:
def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:
nums.sort()
for i in range(len(nums)):
if k>0 and nums[i] < 0:
k-=1
nums[i]=-nums[i]
if k%2==1:
nums.sort()
nums[0]=-nums[0]
return sum(nums)
134. Gas Station
这道题基本思路就是把两个数组的数据转成差值,并且进行相加判断是什么时候满足要求
Way1:
每次叠加gas和cost的差值,如果有负值则start为i+1,如果总的gas小于总的cost则没有一条线路可用
class Solution:
def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
cursum=0
total=0
start=0
for i in range(len(gas)):
cursum+=+gas[i]-cost[i]
total+=gas[i]-cost[i]
if cursum<0:
start=i+1
cursum=0
if total<0:
return -1
return start
135. Candy
这道题要分别处理左右进行叠代
Way1:
先处理所有的左邻居,如果当前rating的比左边的大,则当前需要左边的candy+1.之后处理右邻居,如果自己比右邻居评分高,则要判断自己当前的candy和右邻居的candy+1 谁大,之后求sum即可
class Solution:
def candy(self, ratings: List[int]) -> int:
candy=[1 for _ in range(len(ratings))]
for i in range(1,len(ratings)):
if ratings[i]>ratings[i-1]:
candy[i]=candy[i-1]+1
for i in range(len(ratings)-2,-1,-1):
if ratings[i]>ratings[i+1]:
candy[i]=max(candy[i+1]+1,candy[i])
return sum(candy)