day35|1005.K次取反后最大化的数组和 134. 加油站135. 分发糖果

文章目录

  • 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表示是按照正序还是反序
    补充:
  1. 多级排序:先照着第三个元素内容排序,再是第二个

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

在这里插入图片描述

思路

这题很简单的,但是我没有想出来,可能今天过于焦虑紧张了
总体思路:两步贪心,先给nums sort一下【🎈✨按照绝对值进行排序

  1. 对于负数全部进行取反
  2. 如果多到k,对于全是非负数的nums里面的最小值进行取反(如果k为奇数,因为偶数情况相当于没变)

方法一

下面是自己写的,但是两次sort,因为没有按照绝对值进行排序降序

class Solution(object):
    def largestSumAfterKNegations(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """

        nums = sorted(nums)
        for i in range(0,len(nums)-1):
            if nums[i] < 0 and k > 0:
                k -= 1
                nums[i] = -nums[i]
            elif nums[i] >= 0: break
        nums = sorted(nums)#再排序一次
        if k%2 == 1: nums[0] = -nums[0]
        return sum(nums)

方法二 按照绝对值排序 教程

🎈✨ 背住 按照绝对值进行降序排序的语法是:

sorted(nums, key=lambda x: abs(x), reverse=True) 或者nums.sort( key=lambda x: abs(x), reverse=True)

class Solution(object):
    def largestSumAfterKNegations(self, nums,K):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """

        A = sorted(nums, key=lambda x: abs(x), reverse=True)  # 第一步:按照绝对值降序排序数组A
        for i in range(len(A)):  # 第二步:执行K次取反操作
            if A[i] < 0 and K > 0:
                A[i] *= -1
                K -= 1

        if K % 2 == 1:  # 第三步:如果K还有剩余次数,将绝对值最小的元素取反
            A[-1] *= -1

        result = sum(A)  # 第四步:计算数组A的元素和
        return result

134. 加油站

在这里插入图片描述

思路

因为题目说了有唯一解,所以可以使用暴力求解的方法
贪心算法(方法二):方法一就不用看了
总体思路:每个加油站gas[i]-cost[i]都有剩余量,如果从起始位置累加剩余量小于0的话,说明那一天不行,断油了,从i+1开始作为起始位置,再来绕圈累加;
在这里插入图片描述
为什么是从i+1开始,有没有可能在预先定义的起始位置和i之间有一个合适的呢?教程方法二后段也给出了解释

方法一 教程解法

重新做,我没咋记住

class Solution(object):
    def canCompleteCircuit(self, gas, cost):
        """
        :type gas: List[int]
        :type cost: List[int]
        :rtype: int
        """
        if sum(gas) < sum(cost): return -1
        start = 0
        res = 0
        for i in range(0,len(cost)):
            res += gas[i] - cost[i]
            if res < 0 :
                start = i+1
                res = 0
        return 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: int
        """

        for i in range(len(cost)):
            res = gas[i] - cost[i]# 起始点的剩余量
            next_index = (i+1) % len(gas)

            while res > 0 and next_index != i:#如果没有断油,并且没有回到起始点
                res += gas[next_index] - cost[next_index]
                next_index = (next_index+1) % len(gas)      
            if res >= 0 and next_index == i:
                return i
        return -1

135. 分发糖果

在这里插入图片描述

思路

这道题目一定是要确定一边之后,再确定另一边,例如比较每一个孩子的左边,然后再比较右边,如果两边一起考虑一定会顾此失彼
首先保证右边的孩子大于左边孩子的情况:从前往后遍历
左边的孩子大于右边的孩子的情况:从后往前遍历【为什么不能从后往前遍历看教程】
具体操作:注意第二个情况需要将第一个情况包含进去,取一个max

方法一

class Solution(object):
    def candy(self, ratings):
        """
        :type ratings: List[int]
        :rtype: 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],candy[i+1]+1)
        return sum(candy)

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/700166.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

那些年我看过的技术书(持续更新,大佬的成长之路)

作为一个技术人啊&#xff0c;要学会多看书&#xff0c;发展自己。哦也&#xff01;你可以不关注&#xff0c;就把文章点个收藏吧&#xff0c;万一以后想看书了呢&#xff1f; 网络安全 CTF篇 入门篇 《极限黑客攻防&#xff1a;CTF赛题揭秘》 Web篇 Reserve篇 《IDApro…

Nature | 百年未变?博士评定机制该改改了!

19世纪初&#xff0c;德国和法国先后开始授予现代科研博士学位。时至今日&#xff0c;大学的科研与教学早已不同于往昔。但惊人的是&#xff0c;获得和评定博士学位的流程却几乎没变。但改革势在必行。 博士生导师可以从其他教育阶段的创新中学到很多东西。 Innovation in PhD…

TinyHttpd源码精读(三)

在上一章中我们一起看了如何实现静态的网页&#xff0c;在这里我们一起看Tinyhttpd最后的一部分&#xff0c;动态网页的实现&#xff1a;在这里首先声明下因为cgi脚本的支持问题&#xff0c;所以我会新建一个简单的cgi脚本然后将路径导向到这个脚本&#xff1a; 0.perl的配置&…

3、SLAM算法中的运动模型和观测模型和常用传感器类型

SLAM算法中的运动模型和观测模型 常用传感器类型&#xff1a;局部传感器&#xff08;相机、IMU、激光雷达等&#xff09;在小区域内提供了精确的位姿&#xff0c;而全局传感器&#xff08;GPS、磁力计、气压计等&#xff09;在大尺度环境中提供了有噪声但是全局无漂移的定位。 …

【three.js】光源对物体表面影响

目录 一、受光照影响材质 二、光源简介 2.1 点光源 光源位置 点光源辅助观察 完整代码,粘贴即用 2.2 环境光 2.3 平行光 平行光辅助观察 实际生活中物体表面的明暗效果是会受到光照的影响,比如晚上不开灯,你就看不到物体,灯光比较暗,物体也比较暗。在threejs中,…

金融数据中心布线运维管理解决方案

金融行业的核心业务&#xff0c;如交易、支付、结算等&#xff0c;对网络的依赖程度极高。布线作为网络基础设施的重要组成部分&#xff0c;其稳定性和可靠性直接关系到业务的连续运行。因此&#xff0c;良好的布线管理能够确保网络系统的稳定运行&#xff0c;减少因网络故障导…

安装sqlserver2022 express

1、下载 SQL Server 下载 | Microsoft 双击sql2022-ssei-expr 2、安装 下载完成以后&#xff0c;将会出现以下对话框 &#xff1a; 点击【全新SQL Server独立安装或向现有安全添加功能】 下一步&#xff0c;下一步&#xff1a; 下一步&#xff1a; 下一步&#xff0c;这里我…

encoding Token和embedding 傻傻分不清楚?

encoding 编码 “encoding” 是一个在计算机科学和人工智能领域广泛使用的术语&#xff0c;它可以指代多种不同的过程和方法。核心就是编码&#xff1a;用某些数字来表示特定的信息。当然你或许会说字符集(Unicode)更理解这种概念&#xff0c;编码更强调这种动态的过程。而字符…

Rejetto HTTP文件服务器 未授权RCE漏洞复现(CVE-2024-23692)

0x01 产品简介 Rejetto HTTP File Server(HFS)是一个基于HTTP协议的文件服务器软件,旨在为用户提供简单、轻量级且易于使用的文件共享解决方案。功能强大、易于使用的文件服务器软件,无论是个人使用还是团队协作,HFS都能满足用户的需求,提高工作效率。 0x02 漏洞概述 …

vue3根据按钮切换更新echarts对应的数据

效果图 初始化注意 setOption的函数定义&#xff0c;option是指图表的配置项和数据&#xff0c;notMerge是指是否不跟之前设置的 option 进行合并。默认为 false。即表示合并。如果为 true&#xff0c;表示所有组件都会被删除&#xff0c;然后根据新option 创建所有新组件 //…

springboot+vue前后端分离项目中使用jwt实现登录认证

文章目录 一、后端代码1.响应工具类2.jwt工具类3.登录用户实体类4.登录接口5.测试接口6.过滤器7.启动类 二、前端代码1.登录页index 页面 三、效果展示 一、后端代码 1.响应工具类 package com.etime.util;import com.etime.vo.ResponseModel; import com.fasterxml.jackson.…

采用java+springboot+vue+uniapp自主研发的智慧城管源码,城管综合执法平台源代码

智慧城管执法平台源码&#xff0c;PCAPP端全套源码&#xff0c;城管综合执法系统源码。 智慧城管系统拥有自主版权&#xff0c;项目落地案例&#xff0c;有演示&#xff0c;适合二次开发项目使用。 智慧城管执法系统旨在提高城市管理效率&#xff0c;涵盖了城市管理中的很多业务…

Linux kernel本地权限提升漏洞(CentOS8升级内核的解决方案)

一、CentOS8升级kernel内核的必要性 1、增强系统的安全性。 升级CentOS内核可以提供更好的安全性保障。新的内核版本通常包含了的安全补丁和漏洞修复&#xff0c;可以有效防止系统遭受恶意攻击&#xff0c;提高系统的稳定性和安全性。 2、优化硬件兼容性。 CentOS升级内核可以…

深度解析地推效果,Xinstall助您精准提升推广成效

在移动互联网时代&#xff0c;App的推广方式日趋多样化&#xff0c;其中地推作为线下推广的重要一环&#xff0c;因其成本相对较低、互动性强等特点&#xff0c;受到越来越多App厂商的青睐。然而&#xff0c;地推过程中往往面临着数据收集困难、获客率低、业务员费用结算标准难…

HTML5+CSS3小实例:粘性文字的滚动效果

实例:粘性文字的滚动效果 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-sca…

web刷题记录(5)

[羊城杯 2020]easycon 进来以后就是一个默认测试页面&#xff0c; 在这种默认界面里&#xff0c;我觉得一般不会有什么注入点之类的&#xff0c;所以这里先选择用御剑扫扫目录看看有没有什么存在关键信息的页面 扫了一半发现&#xff0c;很多都是和index.php文件有关&#xff0…

运维系列.在Docker中使用Grafana

运维专题 在Docker中使用Grafana - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_2855026…

JAVA开发 PDF文件生成表格,表格根据内容自动调整高度

1、展示效果 2、相关功能实现 JAVA开发 使用Apache PDFBox库生成PDF文件&#xff0c;绘制表格 3、实现代码 import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.ap…

龙芯+RT-Thread+LVGL实战笔记(36)——密码锁完善

【写在前面】不知不觉中,又临近学期末了。这个学期,因为一些特殊原因,一直没怎么更新本教程,而且不得已上调了本教程的价格,在此笔者深表歉意。另一方面,自己带的学生发挥不佳,很遗憾未能闯进国赛,为此笔者也郁闷了相当长一段时间。事已至此,也只能慢慢释然,来年再战…

Python实现音乐播放器 -----------内附源码

Python做一个简易的音乐播放器 简易音乐播放器 import time import pygamefile r歌曲路径 pygame.mixer.init() print(正在播放,file) track pygame.mixer.music.load(file) pygame.mixer.music.play() time.sleep(130) pygame.mixer.music.stop()运行效果&#xff1a; 开始…