包包17网站一起做网店,怎么改变wordpress最大上传文件,wordpress外贸站gdpr,怎样做阿里巴巴网站文章目录 python语法记录 sort格式 1005.K次取反后最大化的数组和思路方法一方法二 按照绝对值排序 教程#x1f388;✨ 背住 按照绝对值进行降序排序的语法是#xff1a; 134. 加油站思路方法一 教程解法方法二 暴力求解 135. 分发糖果思路方法一 总结 python语法记录 sort … 文章目录 python语法记录 sort格式 1005.K次取反后最大化的数组和思路方法一方法二 按照绝对值排序 教程✨ 背住 按照绝对值进行降序排序的语法是 134. 加油站思路方法一 教程解法方法二 暴力求解 135. 分发糖果思路方法一 总结 python语法记录 sort
link
格式
列表为A A.sort(cmp, key, reverse) 和A sorted(A, cmp, key, reverse)是等价的
其中cmp表示排序时进行比较的函数【一般不用是高级用法的范畴自定义函数】key为函数指定取待排序元素的哪一项进行排序。可以指定一个函数或者lambda函数 例如key lambda x: x[ 2 ] 就表示用A的元素的第二个内容进行排序 例如key lambda x : abs(s)就表示用A中的元素的abs进行排序 reverse表示是按照正序还是反序 补充
多级排序先照着第三个元素内容排序再是第二个
1005.K次取反后最大化的数组和 思路
这题很简单的但是我没有想出来可能今天过于焦虑紧张了 总体思路两步贪心先给nums sort一下【✨按照绝对值进行排序】
对于负数全部进行取反如果多到k对于全是非负数的nums里面的最小值进行取反如果k为奇数因为偶数情况相当于没变
方法一
下面是自己写的但是两次sort因为没有按照绝对值进行排序降序
class Solution(object):def largestSumAfterKNegations(self, nums, k)::type nums: List[int]:type k: int:rtype: intnums sorted(nums)for i in range(0,len(nums)-1):if nums[i] 0 and k 0:k - 1nums[i] -nums[i]elif nums[i] 0: breaknums sorted(nums)#再排序一次if k%2 1: nums[0] -nums[0]return sum(nums)
方法二 按照绝对值排序 教程
✨ 背住 按照绝对值进行降序排序的语法是
sorted(nums, keylambda x: abs(x), reverseTrue) 或者nums.sort( keylambda x: abs(x), reverseTrue)
class Solution(object):def largestSumAfterKNegations(self, nums,K)::type nums: List[int]:type k: int:rtype: intA sorted(nums, keylambda x: abs(x), reverseTrue) # 第一步按照绝对值降序排序数组Afor i in range(len(A)): # 第二步执行K次取反操作if A[i] 0 and K 0:A[i] * -1K - 1if K % 2 1: # 第三步如果K还有剩余次数将绝对值最小的元素取反A[-1] * -1result sum(A) # 第四步计算数组A的元素和return result134. 加油站 思路
因为题目说了有唯一解所以可以使用暴力求解的方法 贪心算法方法二方法一就不用看了 总体思路每个加油站gas[i]-cost[i]都有剩余量如果从起始位置累加剩余量小于0的话说明那一天不行断油了从i1开始作为起始位置再来绕圈累加 为什么是从i1开始有没有可能在预先定义的起始位置和i之间有一个合适的呢教程方法二后段也给出了解释
方法一 教程解法
重新做我没咋记住
class Solution(object):def canCompleteCircuit(self, gas, cost)::type gas: List[int]:type cost: List[int]:rtype: intif sum(gas) sum(cost): return -1start 0res 0for i in range(0,len(cost)):res gas[i] - cost[i]if res 0 :start i1res 0return start方法二 暴力求解
就是将每个为起始位置的都遍历一遍看看中间是否会有断油的情况 trick 循环index的写法index (i 1) % len(cost) 下面的写法超时了
class Solution(object):def canCompleteCircuit(self, gas, cost)::type gas: List[int]:type cost: List[int]:rtype: intfor i in range(len(cost)):res gas[i] - cost[i]# 起始点的剩余量next_index (i1) % len(gas)while res 0 and next_index ! i:#如果没有断油并且没有回到起始点res gas[next_index] - cost[next_index]next_index (next_index1) % len(gas) if res 0 and next_index i:return ireturn -1135. 分发糖果 思路
这道题目一定是要确定一边之后再确定另一边例如比较每一个孩子的左边然后再比较右边如果两边一起考虑一定会顾此失彼。 首先保证右边的孩子大于左边孩子的情况从前往后遍历 左边的孩子大于右边的孩子的情况从后往前遍历【为什么不能从后往前遍历看教程】 具体操作注意第二个情况需要将第一个情况包含进去取一个max
方法一
class Solution(object):def candy(self, ratings)::type ratings: List[int]:rtype: intcandy [1] * len(ratings)for i in range(1,len(ratings)):if ratings[i] ratings[i-1]:candy[i] candy[i-1] 1for i in range(len(ratings)-2,-1,-1):if ratings[i] ratings[i1]:candy[i] max(candy[i],candy[i1]1)return sum(candy)总结