Day33|贪心算法part3

k次取反后最大的数组元素和

思路:贪心,局部最优,让绝对值大的负数变正数,当前数值达到最大,整体最优;整个数组和达到最大。如果把序列中所有负数都转换为正数了,k还没耗尽,就是k还大于0,那就反复转换排序后的比较小的那个元素,把k耗尽,这时候对总和的损耗会比较小,是不可避免的损耗了。

class Solution{
static bool cmp(int a,int b){
    return abs(a) > abs(b);//abs是取绝对值
}
public:
    int largestSumAfterKNegations(vector<int>&A,int K){
        sort(A.begin(),A.end(),cmp);//按绝对值大小排序
        for(int i = 0;i < A.size(); i++){//从前往后遍历,将负数转换成正数
            if(A[i] < 0 && K > 0){
                A[i]*= -1;
                K--;
            }
        }
        if(K & 2 == 1)A[A.size() - 1]*= -1;//对排序后的最后一个元素反复变换正负,消耗k
        int result = 0;
        for(int a : A)result += a;//求和
        return result;
    }
}

加油站

思路:贪心的思路1,直接从全局出发考虑:

第一种情况,如果gas的总和小于cost总和,那么无论从哪里出发都跑不了一圈。

第二种情况,rest[i] = gas[i] - cost[i]为一天剩下的油,i从0开始计算累加到最后一站,如果累加没出现负数,说明0就是起点。

第三种情况,如果累加的最小值是负数,汽车就要从非0节点出发,从后往前看,那个节点能把gas[i]-cost[i]给填平了,那它就是起点。

class Solution{
    public:
       int canCompleteCircuit(vector<int>&gas,vector<int>&cost){
           int curSum = 0;
           int min = INT_MAX;//从起点出发,油箱里的油量最小值
           for(int i = 0; i < gas.size();i++){
              int rest = gas[i] - cost[i];//一天剩下的油
              curSum += rest;//累加每天剩下的
              if(curSum < min){
                min = curSum;//如果最终一天剩下的油量比油箱油量最小值还小,将剩余油量记录在min内
              }
           }
           if(curSum < 0)return -1;//总和小于0,返回-1
           if(min >= 0)return 0;//油量最小值>0,返回0
           for(int i = gas.size() - 1; i >= 0;i--){//以上两个都不是
            int rest = gas[i] - cost[i];          
            min += rest;                      //累加后最小值不是负数就返回节点i,是负数就继续遍历找节点
            if(min >= 0){
                return i;
            }
           }
           return -1;
       }
}

贪心思路2:

如果总油量减去总消耗大于等于0一定可以跑完一圈,也就是各个站点的加油站剩油量rest[i] 为gas[i] - cost[i]。

i从0开始累加rest[i],和记为curSum,一旦curSum小于0,说明[0,i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到这里都会断油,那么起始位置往前推一个节点到i+1,再次从0计算curSum,合适就是它了,返回,不合适,继续推。

局部最优:当前累加rest[i]的和curSum一旦小于0,起始位置至少是i + 1,因为从i之前开始一定不行。全局最优,找到可以跑一圈的起始位置。

来自Leetcode的Gnakuw的图解

 

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

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

相关文章

AWS的CISO:GenAI只是一个工具,不是万能钥匙

根据CrowdStrike的年度全球威胁报告,尽管研究人员预计人工智能将放大对防御者和攻击者的影响,但威胁参与者在其行动中使用人工智能的程度有限。该公司上个月在报告中表示:“在整个2023年,很少观察到GenAI支持恶意计算机网络运营的开发和/或执行。” 对于GenAI在网络安全中的…

Python:在 Ubuntu 上安装 pip的方法

目录 1、检测是否已安装pip 2、更新软件源 3、安装 4、检测是否安装成功 pip和pip3都是Python包管理工具&#xff0c;用于安装和管理Python包。 在Ubuntu上&#xff0c;pip和pip3是分别针对Python2和Python3版本的pip工具。 pip3作用&#xff1a;自动下载安装Python的库文…

2024年HW技术总结

我们都知道&#xff0c; 护网行动 是国家应对网络安全问题所做的重要布局之一。至今已经是8个年头了&#xff0c;很多公司在这时候人手不够&#xff0c;因此不得不招募一些网安人员来参加护网。 红队 扮演攻击的角色&#xff0c;蓝队 扮演防守、溯源的角色&#xff0c;紫队当然…

Java 的 System 类常用方法介绍

Java 中的 System 类是一个final类&#xff0c;它提供了与系统相关的属性和方法。它是一个内置的类&#xff0c;可以直接使用&#xff0c;不需要实例化。System 类提供了标准输入、标准输出和错误输出流&#xff0c;以及对外部定义的属性和系统环境的访问。下面是 System 类的一…

如何在Android 上查找恢复删除/隐藏的照片?5 个值得尝试的方法分享

Android 设备上的删除/隐藏图像有多种用途&#xff0c;无论是保护隐私还是优化存储空间。然而&#xff0c;在某些情况下&#xff0c;用户可能由于意外隐藏、删除或仅仅是出于好奇而需要取消删除/隐藏这些照片。在这种情况下&#xff0c;了解如何在 Android 上查找删除/隐藏的照…

Sora的新商业视角:从生态构建到未来产业协同

在科技飞速发展的当下&#xff0c;人工智能与机器学习不仅重塑了我们的生活方式&#xff0c;还深刻地改变了商业模式的构建方式。Sora&#xff0c;作为一款前沿的AI视频生成工具&#xff0c;其盈利路径和未来产业协同的可能性值得深入探讨。 Sora学习资料&#xff1a;使用方式…

LabVIEW智能Modbus监控系统

LabVIEW智能Modbus监控系统 在自动化和信息化迅速发展下&#xff0c;传统的监控系统已无法满足现代工业对于数据通讯和处理的高效率和高可靠性要求。为了解决这一问题&#xff0c;设计了一套基于LabVIEW的智能Modbus监控系统。该系统利用LabVIEW的图形化编程环境和Modbus协议的…

Java jdk 21 安装

下载软件 https://www.oracle.com/hk/java/technologies/downloads/#jdk21-windows x64 MSI Installer&#xff1a; https://download.oracle.com/java/21/latest/jdk-21_windows-x64_bin.msi 获取JRE 用旧版Java的&#xff0c;不一定会知道这一个步骤 创建JRE命令&#xff…

【牛客】VL76 任意奇数倍时钟分频

描述 编写一个模块&#xff0c;对输入的时钟信号clk_in&#xff0c;实现任意奇数分频&#xff0c;要求分频之后的时钟信号占空比为50%。模块应包含一个参数&#xff0c;用于指定分频的倍数。 模块的接口信号图如下&#xff1a; 要求&#xff1a;使用Verilog HDL语言实现&#…

初阶数据结构之---二叉树的顺序结构-堆

引言 今天要讲的堆&#xff0c;不是操作系统虚拟进程地址空间中&#xff08;malloc&#xff0c;realloc等开空间的位置&#xff09;的那个堆&#xff0c;而是数据结构中的堆&#xff0c;它们虽然名字相同&#xff0c;却是截然不同的两个概念。堆的底层其实是完全二叉树&#x…

electron 程序与安装包图标放大与制作

原因 electron-builder 在打包时需要最小支持到256x256像素的icon图标。原有历史图标都太小了。需要尝试将图标放大。 工具 convertio.co/zh/ico-png/ 在线ico转png网站 https://github.com/upscayl/upscayl 图片放大工具 csdn下载 greenfish-icon-editor-pro.en.softonic.c…

Tomcat 的安装(详细教程)

目录 一、概述二、安装前准备三、Windows 安装1. 方式一2. 方式二 一、概述 官网&#xff1a;https://tomcat.apache.org/ Tomcat 是一个免费的、开放源代码的 Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;由 Apache、Sun 和一些公司以及个人共同开发而成&…

【MapReduce】03.MapReduce框架原理

目录 1.InputFormat数据输入 1.1.切片与MapTask并行度决定机制 1.2.Job提交流程源码和切片源码 1.3.FileInputFormat切片机制 1.4.TextInputFormat 1.5.CombineTextInputFormat切片机制 1.6.CombineTextInputFormat 1.InputFormat数据输入 1.1.切片与MapTask并行度决定…

Qt开发QHostInfo主机地址查询组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QHostInfo组件实现对主机地址查询功能…

IP地址:现代网络通信的基础

IP地址&#xff08;Internet Protocol Address&#xff09;是指互联网协议地址&#xff0c;又译为网际协议地址。它是IP协议提供的一种统一的地址格式&#xff0c;为互联网上的每一个网络和每一台主机分配一个逻辑地址&#xff0c;以此来屏蔽物理地址的差异。这种地址形式使得互…

第九篇 – 过程发现(Process Discovery)是如何赋能数字化市场营销全过程?- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先后为700多家媒体…

【Python】成功解决AttributeError: ‘MyClass‘ object has no attribute ‘my_attribute‘

【Python】成功解决AttributeError: ‘MyClass’ object has no attribute ‘my_attribute’ &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门…

魅力女神节•巾帼绽芳华 | 联诚发开展三八国际妇女节慰问活动

为进一步丰富女职工精神文化生活&#xff0c;展现新时代巾帼风采&#xff0c;弘扬积极向上、奋勇争先的精神风貌。3月8日&#xff0c;联诚发LCF开展了三八妇女节慰问活动&#xff0c;为全体女职工送上温馨的祝福和节日的问候。 清晨&#xff0c;活动现场便已经装饰一新&#xf…

【kerberos】hadoop集群使用keytab认证的逻辑

一、背景&#xff1a; haoop的kerberos认证核心是org.apache.hadoop.security.UserGroupInformation类。 UserGroupInformation一般有两种&#xff1a;&#xff08;1&#xff09;apache原生的&#xff08;2&#xff09;cdh hdp改良过的&#xff0c;即cloudera改良过的。 由此衍…

基于SpringBoot校园失物招领系统的设计与实现(程序+数据库+文档)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…