首页 > 编程语言 >代码随想训练营第三十四天(Python)| 1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果

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

时间:2023-11-13 17:45:46浏览次数:48  
标签:index nums int res gas 取反 第三十四 ratings 135

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

class Solution:
    def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:
        nums.sort(key=lambda x:abs(x), reverse=True)

        for i in range(len(nums)):
            if nums[i] < 0 and k > 0:
                nums[i] *= -1
                k -= 1

        if k % 2 == 1:
            nums[-1] *= -1

        return sum(nums)

134. 加油站
1、暴力法

class Solution:
    def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
        for i in range(len(gas)):
            rest = gas[i] - cost[i] # 剩余汽油量
            index = (i + 1) % len(gas) # 到达第几个加油站

            # 从第 i 个汽油站出发
            while rest > 0 and index != i:
                rest += gas[index] - cost[index]
                index = (index + 1) % len(gas)

            # 跑完一圈且汽油量大于等于0:
            if rest >= 0 and index == i:
                return i
        return -1

2、贪心法

class Solution:
    def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
        cur_gas = 0
        total_gas = 0
        start = 0

        for i in range(len(gas)):
            cur_gas += gas[i] - cost[i]
            total_gas += gas[i] - cost[i]

            if cur_gas < 0:
                start = i + 1
                cur_gas = 0
        if total_gas < 0:
            return -1

        return start

135. 分发糖果

class Solution:
    def candy(self, ratings: List[int]) -> int:
        n = len(ratings)
        res = [1] * n

        # 从左到右遍历
        for i in range(1, n):
            if ratings[i] > ratings[i-1]:
                res[i] = res[i-1] + 1

        # 从右到左遍历
        for j in range(n-2, -1, -1):
            if ratings[j] > ratings[j+1]:
                res[j] = max(res[j], res[j+1] + 1)

        return sum(res)

标签:index,nums,int,res,gas,取反,第三十四,ratings,135
From: https://www.cnblogs.com/yixff/p/17829721.html

相关文章

  • CF1359D Yet Another Yet Another Task
    貌似没有线段树做法。记\(s\)为\(a\)的前缀和数组。对于一个确定的右端点\(r\)和左端点\(l\),它对于答案的贡献是\(s_r-s_{l-1}-max\{a_i\},l\lei\ler\),如果枚举右端点,令\(c_l=s_{l-1}+max\{a_i\},l\lei\)。那么其实就是要求\(1\lek\ler-1\)的\(min\{c_k\}\)。线......
  • NEFU OJ Problem1356 帽儿山奇怪的棋盘 题解
    帽儿山奇怪的棋盘题目:TimeLimit:1000ms|MemoryLimit:65535KDescription军哥来到了帽儿山,发现有两位神人在顶上对弈。棋盘长成下图的模样:每个点都有一个编号:由上到下,由左到右,依次编号为1、2……12。两位神人轮流博弈,每一轮操作的一方可以取走一个棋子,或者取走相邻的两......
  • 新品发布:信驰达TI CC1352P7双频段多协议模块RF-TI1352P2,支持Matter over Thread
    近日,领先的无线物联网通信模块厂商深圳市信驰达科技推出了基于TICC1352P7为核心的双频段(Sub-1GHz和2.4GHz)多协议无线模块RF-TI1352P2。RF-TI1352P2模块除了集成负责应用逻辑的高性能48MHz ARMCortex-M4F主处理器与一个专用于负责射频核心的ARMCortex-M0处理器之外,还......
  • 1357. Apply Discount Every n Orders 每隔n个顾客打折
    Thereisasupermarketthatisfrequentedbymanycustomers.Theproductssoldatthesupermarketarerepresentedastwoparallelintegerarrays products and prices,wherethe ith producthasanIDof products[i] andapriceof prices[i].Whenacust......
  • 整数取反和按位取反
    1.概念在计算机中,-res和~res是两种完全不同的操作,它们有不同的含义和效果按位取反“~”:按位取反1变0,0变11.1‘-res’-res表示对res进行整数取反操作。如果res是一个有符号整数的二进制表示,如1010,那么-res将变为-1010。1.2‘~res’~res表示对res进行按位取反操作~re......
  • 算法训练day36 1005.134.135.
    算法训练day361005.134.135.1005.K次取反后最大化的数组和题目1005.K次取反后最大化的数组和-力扣(LeetCode)题解代码随想录(programmercarl.com)将数字按绝对值大小排序优先将绝对值最大的负数取反剩余步骤将最小非负数取反注意数组大小顺序,以及处理剩余......
  • BitBake使用攻略--BitBake的语法知识二(转载自https://www.cnblogs.com/chegxy/archive
    目录写在前面1.BitBake中的任务2.任务配置2.1依赖2.1.1内部任务间的依赖2.1.2不同菜谱下的任务间依赖2.1.3运行时态下的依赖2.1.4递归依赖2.1.5任务间的依赖2.2事件2.3校验和3.ClassExtensionMechanism 写在前面这是《BitBake使用攻略》系......
  • 如何预防网络数据丢失203.135.128.x
    数据丢失对于任何规模的企业来说都可能是灾难性的事件,并且代价高昂,这就是预防数据丢失至关重要的原因。企业可以使用各种程序来增强其网络安全性并防止数据丢失。此外,他们可以使用多种策略来管理数据泄露。数据备份和加密。在各种策略中,定期数据备份是企业应该实施的关键策略之一。......
  • [LeetCode] 1354. Construct Target Array With Multiple Sums 多次求和构造目标数组
    Youaregivenanarray target ofnintegers.Fromastartingarray arr consistingof n 1's,youmayperformthefollowingprocedure:let x bethesumofallelementscurrentlyinyourarray.chooseindex i,suchthat 0<=i<n andsettheva......
  • [arc135f] Delete 1, 4, 7, ...
    F-Delete1,4,7,...设\(f(i)\)表示第一次操作后,第\(i\)个位置的数,那么\(f(i)=\lfloor\frac{3i+1}2\rfloor\)那么\(k\)次操作后,第\(i\)个位置上的数就是:\[f(f(...f(f(i))...))=f^k(i)\]设\(cnt_k\)表示\(k\)次操作后剩下的数的个数,那么显然有:\(cnt_i=\lfloor\frac{cnt_......