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

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

class Solution:
    def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:
        i=0
        while(i<k):
            nums.sort()
            nums[0]=-nums[0]
            nums.sort()
            i+=1
        return sum(nums)

134. 加油站

#伪代码
cursum=0
totalsum=0
start=0
for(i=0;i<gas.size();i++){
   cursum+=(gas[i]-cost[i])
   totalsum+=(gas[i]-cost[i])
   if(cursum<0):
     start=i+1;
     cursum=0;
}
if(totalsum<0): return -1;
else:
   return start;
class Solution:
    def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
        res=[0]*len(gas)
        cursum=0
        start=0
        for i in range(len(gas)):
            res[i]=gas[i]-cost[i]
        if sum(res)<0:
            return -1
        else:
            for i in range(len(gas)):
                cursum+=res[i]
                if(cursum<0):
                    start=i+1
                    cursum=0
            return start

135. 分发糖果

#伪代码
先确定一边,再确定另一边
vector<int> Candy(rating.size(),1);
for(i=1;i<rating.size();i++){
   if(rating[i]>rating[i-1])
     Candy[i]=Candy[i-1]+1;
 }
for(i=rating.size()-2;i>=0;i--){
   if(rating[i]>rating[i+1])
      Candy[i]=max(Candy[i+1]+1,Candy[i])
}

for(i=0;i<Candy.size();i++){
   result+=Candy[i]}
return result
class Solution:
    def candy(self, ratings: List[int]) -> int:
        candy=[1]*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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值