【算法学习系列】01 - 求某个数组中的任意两个位置之间的累加和

文章讲述了程序员学习算法的重要性,包括提高编程技能、增强解决问题的能力以及对职业发展的影响。作者通过一个求解数组前缀和的例子,展示了如何运用算法解决实际问题,并提供了代码实现。

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

背景


已经呆在自己的舒适圈有很长一段时间了(公司快3年了,业务都熟的差不多了),决定开始改变(任何时候都不晚),尝试学习解决一些算法题,给自己一些适当的压力和不适感。希望能更好的提升自己的思考与编程能力。

这篇文章算是这个系列的第一篇,后续会不定期更新已经学习理解的算法题,可以期待一下。

另外,学习算法对程序员来说有很多好处。以下是一些主要的好处:

  1. 提高编程技能:学习算法可以帮助程序员更好地理解计算机科学的基础知识,从而提高编程技能。掌握算法可以帮助程序员更好地设计和实现高效的代码。
  2. 解决问题的能力:学习算法可以帮助程序员更好地解决问题。算法可以帮助程序员更好地理解问题,并提供一种系统的方法来解决问题。
  3. 提高职业发展:掌握算法可以帮助程序员在职业发展方面更上一层楼。许多公司都需要程序员具备算法和数据结构方面的知识,因此掌握这些技能可以帮助程序员在职业发展方面更有竞争力。

总之,学习算法对程序员来说是非常重要的。它可以帮助程序员提高编程技能、解决问题的能力,并在职业发展方面更上一层楼。

解决思路


  • 一些基本的边界条件都是满足的,例如:左右位置不会超出数组长度,左位置不会大于有位置等。
  • 求取这个数组的前缀和数组。假设原数组为 arr ,声明如下:
int[] arr = {1, 2, 3, 4, 5, 6};

那么数组 arr 对应的前缀和数组 prefix_sum_arr 为:

int[] prefix_sum_arr = {1, 3, 6, 10, 15, 21};

所以,数组 aar 的第 0 个位置到第 3 个位置之间的累加和为:prefix_sum_arr[3]

第 2 个位置到第 4 个位置之间的累加和为:prefix_sum_arr[4] - prefix_sum_arr[2-1]

任意位置之间的累加和依次类推,可以总结出规律。

代码实现


	/**
     * 求某个数组中任意两个位置之间的累加和
     * 假设数据满足边界条件
     */
    private void range2Sum(int[] arr, int left, int right) {
        System.out.println(":> 原数组 " + Arrays.toString(arr));
        // 求取前缀和数组 prefix_sum_arr
        int len = arr.length;
        int[] prefix_sum_arr = new int[len];
        for (int i = 0;i < len;i++){
            if (i == 0){
                prefix_sum_arr[i] = arr[i];
            }else {
                prefix_sum_arr[i] = prefix_sum_arr[i - 1] + arr[i];
            }
        }
        System.out.println(":> 前缀和数组 " + Arrays.toString(prefix_sum_arr));

        // 求累加和
        int result = (left == 0 ? prefix_sum_arr[right] : prefix_sum_arr[right] - prefix_sum_arr[left - 1]);
        System.out.println(":> 左位置=" + left + ", 右位置=" + right);
        System.out.println(":> 累加和为 " + result);
    }
  • 测试与输出:
int[] arr = {1, 2, 3, 4, 5, 6};
range2Sum(arr, 1, 4);

在这里插入图片描述

可以看到结果计算正确。


技术永不眠!下期有缘再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值