首页 > 其他分享 >day 34 1005.K次取反后最大化的数组和 | 134. 加油站 | 135. 分发糖果

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

时间:2023-04-03 10:46:36浏览次数:42  
标签:nums int candyVec gas 取反 len 34 加油站 135

1005.K次取反后最大化的数组和
给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)

以这种方式修改数组后,返回数组可能的最大和。

示例 1:

  • 输入:A = [4,2,3], K = 1
  • 输出:5
  • 解释:选择索引 (1,) ,然后 A 变为 [4,-2,3]。

  • 第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小
  • 第二步:从前向后遍历,遇到负数将其变为正数,同时K--
  • 第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完
  • 第四步:求和
class Solution {
    public int largestSumAfterKNegations(int[] nums, int k) {
        nums = IntStream.of(nums).boxed().sorted((o1, o2) -> Math.abs(o2) - Math.abs(o1)).mapToInt(Integer::intValue).toArray();
        int len = nums.length;
        for (int i = 0;i < len; i++) {
            if (nums[i] < 0 && k > 0) {
                nums[i] = -nums[i];
                k--;
            }
        }

        if (k % 2 == 1) nums[len - 1] = -nums[len - 1];
        return Arrays.stream(nums).sum();
    }
}

在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。

你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。

如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。

说明:

  • 如果题目有解,该答案即为唯一答案。
  • 输入数组均为非空数组,且长度相同。
  • 输入数组中的元素均为非负数。

示例 1: 输入:

  • gas = [1,2,3,4,5]
  • cost = [3,4,5,1,2]

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

每个加油站的剩余量rest[i]为gas[i] - cost[i]。

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

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int curSum = 0;
        int totalSum = 0;
        int index = 0;

        for (int i = 0;i < gas.length; i++) {
            curSum += gas[i] - cost[i];
            totalSum += gas[i] - cost[i];
            if (curSum < 0) {
                index = (i + 1) % gas.length;
                curSum = 0;
            }
        }
        if (totalSum < 0) return -1;
        return index;
    }
}

老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。

你需要按照以下要求,帮助老师给这些孩子分发糖果:

  • 每个孩子至少分配到 1 个糖果。
  • 相邻的孩子中,评分高的孩子必须获得更多的糖果。

那么这样下来,老师至少需要准备多少颗糖果呢?

示例 1:

  • 输入: [1,0,2]
  • 输出: 5
  • 解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果

class Solution {
    public int candy(int[] ratings) {
        int len = ratings.length;
        int[] candyVec = new int[len];
        candyVec[0] = 1;
        for (int i = 1; i < len; i++) {
            candyVec[i] = (ratings[i] > ratings[i - 1]) ? candyVec[i - 1] + 1 : 1;
        }
        for (int i = len - 2; i >= 0; i--) {
            if (ratings[i] > ratings[i + 1]) {
                candyVec[i] = Math.max(candyVec[i], candyVec[i + 1] + 1);
            }
        }
        return Arrays.stream(candyVec).sum();
    }
}

 

标签:nums,int,candyVec,gas,取反,len,34,加油站,135
From: https://www.cnblogs.com/libertylhy/p/17282354.html

相关文章

  • 力扣---剑指 Offer 34. 二叉树中和为某一值的路径
    给你二叉树的根节点root和一个整数目标和targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。叶子节点是指没有子节点的节点。 示例1:  输入:root=[5,4,8,11,null,13,4,7,2,null,null,5,1],targetSum=22输出:[[5,4,11,2],[5,8,4,5]]示例2:......
  • 347.前 K 个高频元素
    给定一个非空的整数数组,返回其中出现频率前k高的元素。示例1:输入:nums=[1,1,1,2,2,3],k=2输出:[1,2]示例2:输入:nums=[1],k=1输出:[1]classcmp{public:booloperator()(conststd::pair<int,int>&a,conststd::pair<int,int>&b){......
  • ubuntu安装ch34x驱动,并安装串口调试助手
    1、查看系统自带的ch34x驱动kangxubo@kangxubo-HKNS:/lib/modules/5.19.0-38-generic/kernel/drivers/usb/serial$lsaircable.koftdi_sio.kokobil_sct.kopl2303.kousb_debug.koark3116.kogarmin_gps.komct_u232.koqcaux.ko......
  • linux操作系统实验四-以time/gettimeofday系统调用为例分析ARM64 Linux 5.4.34
    一、搭配环境(1)安装编译工具sudoapt-getinstallgcc-aarch64-linux-gnusudoapt-getinstalllibncurses5-dev build-essentialgitbisonflexlibssl-dev(2)制作根文件系统wget https://busybox.net/downloads/busybox-1.33.1.tar.bz2tar-xjfbusybox-1.33.1.tar.bz2......
  • 202031607334-贾小萌 实验一 软件工程准备 初步认识软件工程
    项目内容班级博客链接20级卓越班本次作业要求链接实验一软件工程准备我的课程学习目标学习博客园软件开发者学习社区使用技巧和经验;了解Github基本操作本次作业在哪方面帮我实现学习目标初步了解博客园软件和Github的基本操作;初步认识软件工程实验内容......
  • day8| 344.反转字符串;541.反转字符串II;剑指offer 05.替换空格;151.翻转字符串里的单词
    344.反转字符串 题目简述:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组,使用O(1)的额外空间解决这一问题。 解题思路:没什么好说的,直接双指针 代码如下:classSolution:de......
  • P1345 奶牛的电信
     题目略,就是求最小割(容量和最小的边集,使得图不联通,常用S-T割) 那么最小割=最大流这里要求点权和最小,可以通过拆点转化为边权#include<iostream>#include<algorithm>#include<cstring>#include<queue>#defineIOSstd::ios::sync_with_stdio(0)usingnamespacestd;......
  • ISYS3401 IT Evaluation
    ISYS3401ISYS3401ITEvaluation(2023)IndividualAssignment1(30%)ThisITEvaluationassignmentfollowsa3-phaseassessmentplanintroducedinlecture5.The......
  • 第135篇:npm模块全局安装后无法使用解决方案
    好家伙 npm模块全局安装后无法使用 估计是少配了环境变量1.使用命令:npmconfiggetprefix找到全局包的安装位置  2.随后我们右键"我的电脑"打开 "属......
  • 级联pwm整流器(级联H桥CHB)(单相交流220V-直流135*3整流)仿真,动稳态性能良好
    级联pwm整流器(级联H桥CHB)(单相交流220V-直流135*3整流)仿真,动稳态性能良好,0.5s切换不平衡负载,0.6s启动直流电压均衡控制,附带仿真介绍文档,详细讲述仿真搭建过程,并附带参考文献......