快速掌握 一维等差数列差分

文章介绍了如何通过等差数列的设置和前缀和计算,对给定数组进行m次操作,以实现特定的数组结构。主要包括set函数和build操作来实现差分数组的构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 等差数列差分
// n个 0的数组成的数组arr 进行m个操作
// 每个操作都让你 从l-r范围加上 首项为s 末项为e 公差为d 的等差数列

//   等差数列差分推演过程
// 假设让2-6 加上首项为s 末项为e 公差为d 的等差数列
// 怎么样的操作才可以的到最终的结果
//我们来进行以下反推
		                       
// [0,0,S,-S+d,0,0,0,-e-d,e,0]                              
// [0,1,2, 3  ,4,5,6,  7 ,8,9]        下标              第二次反推
                              //反推 ⬆ 
// [0,0,S,d,d,d,d,-e ,0,0]
// [0,1,2,3,4,5,6, 7 ,8,9]            下标              第一次反推
                            //  反推 ⬆   
// [0,0,S,S+d,S+2d,S+3d,e,0,0,0]            e=S+4d  e是末项
// [0,1,2, 3 , 4  , 5  ,6,7,8,9]      下标              最终结果

// 我们知道最终数组是差分数组的前缀和数组
// 那么我们从最终数组进行反推
// 通过反推两次前缀和 得到了差分数组

// 由此可见我们应该进行以下操作
// arr[l]+=S  arr[l+1]+=d-s   arr[r+1]-=e+d  arr[r+2]+=e
//  再对数组求两次前缀和就可以得到最终数组

  // 
// 
// 先进行set函数操作
// 在进行 build 操作

// set操作函数
    public static void set(int []arr,int s,int d,int e,int r,int l){
        arr[l]+=s;
        arr[l+1]+=d-s;
        arr[r+1]-=e+d; //arr[r+1]+=-e-d
        arr[r+2]+=e;
    }


// 求两边前缀和方法
 public static void build(int [] arr){
     for(int =1;i<=n;i++){
         arr[i]+=arr[i-1];
     }
       for(int =1;i<=n;i++){
         arr[i]+=arr[i-1];
     }
 }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值