首页 > 其他分享 >Array Sum up increment. 1526, 3229

Array Sum up increment. 1526, 3229

时间:2024-07-22 09:30:43浏览次数:21  
标签:3229 target .. nums Sum up result diff array

1526. Minimum Number of Increments on Subarrays to Form a Target Array

You are given an integer array target. You have an integer array initial of the same size as target with all elements initially zeros.

In one operation you can choose any subarray from initial and increment each value by one.

Return the minimum number of operations to form a target array from initial.

The test cases are generated so that the answer fits in a 32-bit integer.

 Example 1:

Input: target = [1,2,3,2,1]
Output: 3
Explanation: We need at least 3 operations to form the target array from the initial array.
[0,0,0,0,0] increment 1 from index 0 to 4 (inclusive).
[1,1,1,1,1] increment 1 from index 1 to 3 (inclusive).
[1,2,2,2,1] increment 1 at index 2.
[1,2,3,2,1] target array is formed.

Example 2:

Input: target = [3,1,1,2]
Output: 4
Explanation: [0,0,0,0] -> [1,1,1,1] -> [1,1,1,2] -> [2,1,1,2] -> [3,1,1,2]

Example 3:

Input: target = [3,1,5,4,2]
Output: 7
Explanation: [0,0,0,0,0] -> [1,1,1,1,1] -> [2,1,1,1,1] -> [3,1,1,1,1] -> [3,1,2,2,2] -> [3,1,3,3,2] -> [3,1,4,4,2] -> [3,1,5,4,2]. 

Constraints:

  • 1 <= target.length <= 105
  • 1 <= target[i] <= 105
/**
1,2,3,2,1
^
result = 1

1,2,3,2,1
  ^
2比1需要额外的1个cost, 因此:
result = 1 + 1

1,2,3,2,1
    ^
3比2需要额外的1个cost,因此:
result = 1 + 1 + 1

1,2,3,2,1
      ^
2比3小,因此3的cost已经足以cover2,因此
result = 1 + 1 + 1 + 0

1,2,3,2,1
        ^
1比2小,因此2的cost已经足以cover 1,因此
result = 1 + 1 + 1 + 0 + 0

答案: 3

 */

class Solution {
    public int minNumberOperations(int[] target) {
        int result = target[0];
        for(int i = 1; i < target.length; i++) {
            if(target[i] > target[i - 1]) result += target[i] - target[i - 1];
        }
        return result;
    }
}

 

3229. Minimum Operations to Make Array Equal to Target You are given two positive integer arrays nums and target, of the same length. In a single operation, you can select any subarray of nums and increment or decrement each element within that subarray by 1.

Return the minimum number of operations required to make nums equal to the array target.

Example 1:

Input: nums = [3,5,1,2], target = [4,6,2,4]

Output: 2

Explanation:

We will perform the following operations to make nums equal to target:
- Increment nums[0..3] by 1, nums = [4,6,2,3].
- Increment nums[3..3] by 1, nums = [4,6,2,4].

Example 2:

Input: nums = [1,3,2], target = [2,1,4]

Output: 5

Explanation:

We will perform the following operations to make nums equal to target:
- Increment nums[0..0] by 1, nums = [2,3,2].
- Decrement nums[1..1] by 1, nums = [2,2,2].
- Decrement nums[1..1] by 1, nums = [2,1,2].
- Increment nums[2..2] by 1, nums = [2,1,3].
- Increment nums[2..2] by 1, nums = [2,1,4].

 Constraints:

  • 1 <= nums.length == target.length <= 105
  • 1 <= nums[i], target[i] <= 108
class Solution {
    /**
    思路:
        1. 计算两个数组差值,最终的答案就是将差值数组全部变成0的过程
        2. 将差值序列操作后变为全0,我们可以将正负数分开处理
            如果x>y, 那么x在y cost基础上,需要x-y的额外cost才能变成0, 
            如果x<y, 那么x不需要额外cost
     */
    public long minimumOperations(int[] nums, int[] target) {
        // 计算差值
        int[] diff = new int[nums.length];
        for(int i = 0; i < nums.length; i++) {
            diff[i] = target[i] - nums[i];
        }
 
        // 
        long result = Math.abs(diff[0]);
        for(int i = 1; i < diff.length; i++) {
            // 如果都为正
            if(diff[i - 1] >= 0 &&  diff[i] >= 0) {
                if(diff[i - 1] < diff[i]) {
                    result += diff[i] - diff[i - 1];
                }
            }
            // 如果都为负
            else if(diff[i - 1] <= 0 &&  diff[i] <= 0) {
                if(diff[i - 1] > diff[i]) {
                    result += diff[i - 1] - diff[i];
                }
            }
            // 如果方向切换,证明从负->正,或者从正->负, 将当前起始差值加进去
            else {
                result += Math.abs(diff[i]);
            }
        }
        return result;
    }
}

 

标签:3229,target,..,nums,Sum,up,result,diff,array
From: https://www.cnblogs.com/cynrjy/p/18315393

相关文章

  • Beautifulsoup:.find() 和 .select() 之间的区别
    当您使用BeautifulSoup抓取网站的某个部分时,您可以使用soup.find()和soup.findAll()或soup.select().find()和||之间有区别吗?|方法?(例如在性能或灵活性等方面)或者它们是相同的吗?.selec......
  • rabbitmq发送消息localdatetime报错:Java 8 date/time type `java.time.LocalDateTime`
    两种解决方案:通过全局配置LocalDateTime的序列化/***json序列化增强解决Jackson序列化不了Java8日期*/@BeanpublicMessageConvertermessageConverter(){ObjectMapperom=newObjectMapper();om.setVisibility(PropertyAccessor.ALL,JsonAut......
  • Mad MAD Sum(Round 960)
    #include<bits/stdc++.h>#defineintll#defineendl'\n'usingll=longlong;typedefunsignedlonglongull;usingnamespacestd;voidGordenGhost();signedmain(){#ifdefGordenfreopen("in.txt","rt",stdin......
  • LLM-01 大模型 本地部署运行 ChatGLM2-6B-INT4(6GB) 简单上手 环境配置 单机单卡多卡
    搬迁说明之前在CSDN上发文章,一直想着努力发一些好的文章出来!这篇文章在2024-04-1710:11:55已在CSDN发布写在前面其他显卡环境也可以!但是最少要有8GB的显存,不然很容易爆。如果有多显卡的话,单机多卡也是很好的方案!!!背景介绍目前借到一台算法组的服务器,我们可以查看一下......
  • C. Least Prefix Sum
    链接https://codeforces.com/problemset/problem/1779/C题目思路1-m的前缀和最小。那么显然知道[1,m-1]的前缀和更大,所以a[m]<0,同理a[m-1]+a[m]<0,...,a[2]+...+a[m]<0。采用大根堆优先队列管理其中的值,如果上面的任何一个大于零,弹出优先队列的top,减掉两倍的top,让他重新变成......
  • 如何修改 Jupyter Notebook 单元格左侧括号中的数字序列?
    Jupyter在每个单元格的左侧显示一个单元格编号:我想知道为什么JupyterNotebook单元格中的左括号数字序列仅显示奇数。当我更改文件时,它可能显示为偶数,那么如何将数字序列设置为其原始状态呢?JupyterNotebook中左侧括号中的数字序列表示单元格的执行顺序......
  • [CCPC2022 广东] XOR Sum
    数位dp看到这样求和价值的计算,考虑可不可以交换求和符号或者改变计算方式。这题中的位运算使我们考虑按位计算贡献,价值可以写成:\[f(A)=\sum_{i=0}2^i\timesc_i\times(k-c_i)\]其中\(c_i\)表示第\(i\)位上为\(1\)的\(a_i\)数量。题目第二个要求即\(f(A)=n\)。考......
  • 【Rollup】快速上手及其配置
    概述Rollup是一款使用ESModules标准的JavaScript打包工具。它也可以将项目中散落的细小模块打包为整块代码。从作用上来看,Rollup与Webpack非常类似。不过相比于Webpack,Rollup要小巧的多。因为Webpack在配合一些插件的使用下,几乎可以完成开发过程中,前端工程化......
  • 记录 OpenWrt 执行 opkg update 命令报错 Failed to download,但是换源无效且源用浏览
    记录OpenWrt执行opkgupdate命令报错Failedtodownload,但是换源无效且源用浏览器可访问的解决方案解决方法首先给出解决方法:)网络-->接口-->WAN-->编辑-->高级设置取消勾选“自动获取DNS服务器”-->在使用自定义的DNS服务器一栏中添加并输入可用的DNS地址。......
  • A. Sum of Three
    原题链接题解要让abc不同,我们可以先固定ab取两个较小值,然后看看最大的c有没有重复code#include<bits/stdc++.h>#definelllonglongusingnamespacestd;voidsolve(){intn;cin>>n;if(n<7){cout<<"NO\n";return;}......