代码随想录第29天 | ● 1005.K次取反后最大化的数组和 ● 134. 加油站 ● 135. 分发糖果

news2024/11/25 2:32:10

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


var largestSumAfterKNegations = function(nums, k) {
        while(k>0){
            nums.sort((a,b)=>a-b);
            nums[0]=-nums[0];
            k--
        }
        return nums.reduce((prev, cur)=>prev+cur,0)
};

第一想法

每次换最小的那个数,负数换正数,正数换负数,对加起来最大都是最好的选择。但是我用的是sort,应该有更好的方法。

卡哥的思想

先把绝对值大的负数转换了。如果全是正数了,转换最小的那个正数

第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小
第二步:从前向后遍历,遇到负数将其变为正数,同时K–
第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完
第四步:求和


/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var largestSumAfterKNegations = function (nums, k) {
      nums.sort((a, b) => Math.abs(b) - Math.abs(a)); // 按绝对值排序
      let sum=0
       for(let i = 0; i < nums.length; i++) {
        if(nums[i] < 0 && k-- > 0) { // 负数取反(k 数量足够时)
            nums[i] = -nums[i];
        } 
         sum+=nums[i]
       }
       if(k>0&&k%2)
          sum-=2*nums[nums.length - 1]
      return sum
    };

134. 加油站

   var canCompleteCircuit = function (gas, cost) {
      let ok = [];
      let i = 0;
      let count = gas.length;
      if (count === 1 && gas[i] === cost[i]) {
        return 0;
      }
      while (i < gas.length) {
        if (gas[i] > cost[i]) ok.push(i);
        i++;
      }
      for (let i = 0; i < ok.length; i++) {
        let c = ok[i];
        let sum = gas[c];
        let d = 0;
        while (d < count - 1 && sum >= cost[c]) {
          sum = sum - cost[c] + gas[(c + 1) % count];
          if (sum < 0) break;
          d++;
          c = (c + 1) % count;
        }
        if (sum > 0) sum -= cost[c % count];
        if (sum >= 0) return ok[i];
      }
      return -1;
    };

第一想法

按这个来
在这里插入图片描述


卡哥的

首先如果总油量减去总消耗大于等于零那么一定可以跑完一圈,说明 各个站点的加油站 剩油量rest[i]相加一定是大于等于零的。
每个加油站的剩余量rest[i]为gas[i] - cost[i]。

i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。

如图:
在这里插入图片描述


135. 分发糖果

/**
 * @param {number[]} ratings
 * @return {number}
 */
var candy = function(ratings) {
     let n=ratings.length
     let ok=new Array(n)
     ok.fill(1);
     for(let i=0;i<n-1;i++){
         //->
         if(ratings[i]<ratings[i+1])
             ok[i+1]=ok[i]+1
     }
     for(let i=n-1;i>0;i--){
         if(ratings[i]<ratings[i-1]){
            ok[i-1]=ok[i-1]>ok[i]+1?ok[i-1]:ok[i]+1
         }}
    let sum=0
     for(let i=0;i<n;i++){
         sum+=ok[i]
     }
      return     sum }


思路

在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python+vue+django九价疫苗预约系统

疫苗预约的效率&#xff0c;取代人工管理是必然趋势。 本九价疫苗预约系统以Django作为框架&#xff0c;B/S模式以及MySql作为后台运行的数据库。本系统主要包括以下功能模块&#xff1a;用户、医生、医院、九价疫苗、疫苗预约、系统管理等模块&#xff0c;通过这些模块的实现能…

三门问题讨论

三门问题讨论 三门问题第一种第二种 三门问题 三门问题&#xff08;Monty Hall problem&#xff09;亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论&#xff0c;大致出自美国的电视游戏节目Let’s Make a Deal。问题名字来自该节目的主持人蒙提霍尔&#xff08;Monty Hall&…

二分查找 - 二分答案

第四部分 二分答案 最小值最大(或最大值最小)问题,二分答案区间,配合贪心、DP 等其他算法检验这个答案是否合理,最优化问题转换为 判定性问题。 「二分」的本质是二段性,并非单调性。说白了就是答案在一个区间,二分区间,直到找到最优答案。 TreeSet 的方法: E floor​…

Zstack 安装 黑群晖未找到硬盘:解决方法

错误原因&#xff1a; 发生错误的原因&#xff0c;黑群晖要求硬盘为Sata格式&#xff0c;而默认创建的硬盘格式为Virtio&#xff0c;我们要做的就是修改挂载的虚拟硬盘改为Sata格式 解决方法&#xff1a; 1、进入 ZStack&#xff0c;找到黑群晖的主机&#xff0c;查看 UUID …

BUUCTF刷题十一道(08)

文章目录 [HITCON 2017]SSRFme[b01lers2020]Welcome to Earth[CISCN2019 总决赛 Day2 Web1]Easyweb[SWPUCTF 2018]SimplePHP[NCTF2019]SQLi[网鼎杯 2018]Comment[NPUCTF2020]ezinclude[HarekazeCTF2019]encode_and_encode[CISCN2019 华东南赛区]Double Secret[网鼎杯2018]Unfin…

离谱至极!“核弹显卡”?!!

ProgrammeLL&#xff0c;启动&#xff01; 背景 2011年&#xff0c;英伟达发布了GTX590显卡&#xff0c;由于发热和功耗大&#xff0c;发生过多起因超频而电容爆炸事件。 介绍表 芯片厂商NVIDIA显卡芯片Ge Force GTX 590核心代号GF110核心频率607MHzCUDA核心512个显存频率341…

多线程快速入门

线程与进程区别 每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合&#xff0c;或者是程序的特殊段&#xff0c;它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程&#xff0c;它负责在单个程序里…

计算机编程中的编码是什么?

编码是信息从一种形式或格式转换为另一种形式的过程&#xff0c;也称为计算机编程语言的代码&#xff0c;简称编码。用预先规定的方法将文字、数字或其它对象编成数码&#xff0c;或将信息、数据转换成规定的电脉冲信号。编码在电子计算机、电视、遥控和通讯等方面广泛使用。编…

YOLOv8 快速入门

前言 本文是 YOLOv8 入门指南&#xff08;大佬请绕过&#xff09;&#xff0c;将会详细讲解安装&#xff0c;配置&#xff0c;训练&#xff0c;验证&#xff0c;预测等过程 YOLOv8 官网&#xff1a;ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONN…

异步编程 - 12 异步、基于事件驱动的网络编程框架 Netty

文章目录 Netty概述Netty中的一些概念Netty的线程模型Netty Server端Netty Netty 端 TCP半包与粘包问题基于Netty与CompletableFuture实现RPC异步调用 Netty概述 Netty是一个异步、基于事件驱动的网络应用程序框架&#xff0c;其对Java NIO进行了封装&#xff0c;大大简化了TC…

Milvus Cloud扩展变更:为向量数据库注入前沿增强功能

在向量数据库的不断变化中,Milvus Cloud已成为一个改变游戏规则的先锋,革新了我们存储、搜索和分析复杂向量数据的方式。通过最新版本的Milvus Cloud2.3.0,引入了一系列重要的增强和修改,为更强大、更高效的向量数据库解决方案铺平了道路。在本文中,我们将深入探讨Milvus …

自然语言处理-词向量模型-Word2Vec

通常数据的维度越高&#xff0c;能提供的信息也就越多&#xff0c;从而计算结果的可靠性就更值得信赖 如何来描述语言的特征呢&#xff0c;通常都在词的层面上构建特征&#xff0c;Word2Vec就是要把词转换成向量 假设现在已经拿到一份训练好的词向量&#xff0c;其中每一个词都…

Layui自定义列表多选

需求&#xff1a;已回访不需要分配&#xff0c;未回访的可多选分配 效果图&#xff1a; 实现方式 1&#xff0c;自定义复选 2&#xff0c;已回访的框去掉 3&#xff0c;自己写全选方法 注意&#xff1a;要想进方法一定要写lay-filter&#xff0c;才能触发方法&#xff0…

盘点使用代理IP时常会遇到的HTTP代理错误代码

如今&#xff0c;随着全球化的深入发展&#xff0c;越来越多的企业开始向海外拓展业务。跨境电商、海外营销等业务的兴起&#xff0c;使人们对HTTP代理的需求量越来越大。然而&#xff0c;在使用HTTP代理的过程中&#xff0c;常常会遇到各种错误代码&#xff0c;这些错误代码产…

Linux:进程(概念)

学习目标 1.认识冯诺依曼系统 2.认识操作系统概念与定位 (系统调用接口) 3.理解进程的概念&#xff08;PCB&#xff09; 4.理解进程的状态&#xff08;fork创建进程&#xff0c;僵尸进程及孤儿进程&#xff09; 5.了解进程的调度&#xff08;优先级&#xff0c;竞争性&#xff…

2023-2024 人工智能专业毕设如何选题

文章目录 0 简介1 如何选题2 最新毕设选题3 最后 0 简介 学长搜集分享最新的人工智能专业毕设选题&#xff0c;难度适中&#xff0c;适合作为毕业设计&#xff0c;大家参考。 学长整理的题目标准&#xff1a; 相对容易工作量达标题目新颖 1 如何选题 最近非常多的学弟学妹问…

基于单片机压力传感器MPX4115检测-报警系统-proteus仿真-源程序

一、系统方案 本设计采用52单片机作为主控器&#xff0c;液晶1602显示&#xff0c;MPX4115检测压力&#xff0c;按键设置报警&#xff0c;LED报警。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 /***************************************…

类,这一篇文章你就懂了!

提示&#xff1a;本文主要介绍C中类相关知识及基础概念总结 渺渺何所似&#xff0c;天地一沙鸥 文章目录 一、面向对象与面向过程二、类的框架知识2.1 类的定义2.2 类的封装性2.2.1 访问限定符2.2.2 封装的概念以及实现 2.3 类的作用域及实例化2.4 类中this指针 三、六大默认成…

使用feign时提供者从request中获取不到参数值解决方法

使用feign时提供者从request中获取不到参数值解决方法 问题&#xff1a;分析&#xff1a;解决办法 问题&#xff1a; 在开发中&#xff0c;A项目需要在后端调用B项目的feign接口。B项目原来的参数接收都是在httpServletRequest里面&#xff0c;如下图: 我们知道feign接口是不…

6.Xaml CheckBox控件

1.运行图片 2.运行源码 a.xaml 源码 <Grid Name="Grid1"><!--IsThreeState="True" 这个为true的时候,有三个状态 第三个状态为什么也没有--><CheckBox Name=