首页 > 其他分享 >小L的元素修改问题

小L的元素修改问题

时间:2024-11-18 11:44:31浏览次数:3  
标签:int upsize 元素 样例 问题 修改 数组 include

问题描述

小R拿到了一个数组,她可以进行如下操作:使得一个元素加1,另一个元素减1。她希望最终数组的每个元素大小都在 [l, r] 的范围内。小R想知道,最少需要多少次操作可以达到目标。

如果无法通过有限次操作使所有元素都落在指定范围内,则返回 -1


测试样例

样例1:

输入:n = 2 ,l = 3 ,r = 5 ,a = [1, 2]
输出:-1

样例2:

输入:n = 3 ,l = 4 ,r = 6 ,a = [3, 6, 5]
输出:1

样例3:

输入:n = 4 ,l = 2 ,r = 8 ,a = [1, 10, 2, 6]
输出:2

题解:

        首先,整个数组的总和是不变的,所以数组的总和的下限和上限时相同的,于是第一步就是考虑这个数组是否可以塞进这个区间里。

        不用考虑怎么变,只考虑是否能变。所以将所有低于l的元素和高于r的元素之间的差值取出,叫做lowsize和upsize,而其中的较大值就是最后的操作次数。因为其中高的可以补充低的,低的可以削减高的。

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<queue>
#include<stack>
#include<vector>
#include<set>
#include<map>
#include <functional>
using namespace std;
typedef long long int ll;

int solution(int n, int l, int r, std::vector<int> a) {
    // write code here
    int low=l*n,up=r*n,i,j,upsize=0,lowsize=0,sum=0;
    for(i=0;i<a.size();i++){
        sum+=a[i];
    }
    if(sum<low || sum>up){
        return -1;
    }
    for(i=0;i<a.size();i++){
        if(a[i]<l){
            lowsize+=l-a[i];
        }
        if(a[i]>r){
            upsize+=a[i]-r;
        }
    }
    return max(lowsize,upsize);

}

int main() {
    std::cout << (solution(2, 3, 5, {1, 2}) == -1) << std::endl;
    std::cout << (solution(3, 4, 6, {3, 6, 5}) == 1) << std::endl;
    std::cout << (solution(4, 2, 8, {1, 10, 2, 6}) == 2) << std::endl;
}

标签:int,upsize,元素,样例,问题,修改,数组,include
From: https://blog.csdn.net/2301_78848414/article/details/143842834

相关文章

  • JMeter响应乱码问题解决方案教程
    前言      ApacheJMeter是性能测试领域的强大工具,但在使用过程中,测试人员常会遇到响应乱码的问题。乱码不仅影响测试结果的可读性,还可能掩盖关键信息,对测试准确性构成威胁。本教程将深入探讨JMeter响应乱码问题的根源,并提供实用的解决方案。你将学习如何识别乱码现象......
  • inline-block元素下移问题的分析及解决
    不知道大家有没有遇到过这种蛋疼的情况,当你排列了三个display属性为inline-block的div时。我们在其中一个div中输入文字,就会出现如下这种现象,设置文字div的布局变化了。问题定位为什么会出现这种情况呢?我们打开控制台查看一下元素布局,如下图我们能看到第二个div的排......
  • 解决MindSpore-2.4-GPU版本的安装问题
    问题背景虽说在MindSpore-2.3之后的版本中不在正式的发行版中支持GPU硬件后端,但其实在开发分支版本中对GPU后端是有支持的:但是在安装的过程中可能会遇到一些问题或者报错,这里复现一下我的Ubuntu-20.04环境下的安装过程。Pip安装基本的安装流程是这样的,首先使用anaconda创建......
  • Windows regedir 注册表修改硬件配置信息
    前言全局说明Windowsregedir注册表修改硬件配置信息一、说明二、第十五课硬件设置1、启用CPU的二级缓存(需重启)位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement值项:secondleveldatacache修改:我改成了200了,你呢2、修......
  • PowerDesigner 12小技巧-pd修改外键命名规则-pd添加外键
    PowerDesigner12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键1.附加:工具栏不见了调色板(Palette)快捷工具栏不见了PowerDesigner 快捷工具栏palette不见了,怎么重新打开,找回来呢上网搜索了一下”powerdesigner图形工具栏”,找到了找回PowerDesigner工具......
  • 解决安装dkms出现依赖问题
    mrc3@wanglab-node3:~$sudoaptinstalldkmsReadingpackagelists...DoneBuildingdependencytree...DoneReadingstateinformation...DoneSomepackagescouldnotbeinstalled.Thismaymeanthatyouhaverequestedanimpossiblesituationorifyouareusing......
  • Vue3 + Pinia:直接修改数据的终极指南
    Hey小伙伴们!今天我们要聊的是Vue3中一个非常强大的状态管理库——Pinia。Pinia不仅简化了状态管理的复杂度,还提供了丰富的功能,让你在存储数据时更加得心应手。特别是Pinia允许我们直接修改状态数据,非常方便。让我们一起来看看如何在Vue3项目中使用Pinia直接修改数据吧!......
  • 【Azure Redis】因为Redis升级引发了故障转移后的问题讨论
    问题描述AzureRedis是高可用架构,由主节点,从节点两个节点共同组成。 应用客户端连接的Redis服务器的域名,经过DNS解析为上图中LoadBalancer的IP,然后连接转发到主节点。发生故障转移(Failover)是LB后的两个Primary和Replica 节点进行了切换,这个期间没有DNS变动。对于以上情......
  • 问卷结果出炉!医工交叉领域的研究者们普遍关注的问题是……|个人观点·24-11-15
    小罗碎碎念昨天发了一份问卷,征集了一下群友们目前关于科研方面的需求。(此表单长期有效,我会定期更新在知识星球的专栏中)对昨天问卷结果做了一个简单的统计,先展示一下大家普遍关注的问题。需要工科分析数据排在最前面我是不意外的,但是没想到,排在第二的居然是寻求联合培养......
  • n皇后编程问题
    n皇后编程问题是一个经典问题,记得2018年北京航空航天大学计算机学院的博士招聘的上机题目就是这个,这里给出几种实现方法:importtimeimportitertoolsNum=8#Num=12#8deff1():deftest_queens(queens):forxinrange(Num):foryinr......