java 算法 求一个数组 随意两个下标之间的数据之和 (但是每个下标对应的数据是从下标零到下标的)

  • Post author:
  • Post category:java


  1. 首先要有一个思路。

    定义一个数组: int[] array = {6,4,3,2,-4,5}; 如果要求下标2到5之间的数据之和(但是每个下标对应的数据是从下标零到下标的),怎么样写才是最快的呢?

    如果是循环去找指定下标并且去做判断是否到了开始下标,和结束下标。然后把这些之间的数据加起来求和也是可以点,但是它不是最快的。

  2. 最佳的解决思路。

    借助一个其他数组help[],用于存储array的下标数据之和,放到一个新数组中,然后用于求取数据之和。怎么放呢?下面这样放。

    在这里插入图片描述

  3. 有了这个求和后的help数组之后的思路。

    因为是求两个下标之间的数据之和,就是会有两个下标的L,R。

    所以我们以后每次求取的时候就去到help数组中拿下标为R的数据之和这个其实是0到R的数据之和,在去Help去拿L-1的数据之和 这个其实是0到L-1的下标之和。 这样用R的数据减去L-1的数据就是 L到R下标数据之和。

    看不懂没关系,都是代码人,看代码吧。

  //算法求取数据 ,2022.3.17 看算法课第一题,根据思路编写的代码
    @Test
    public void sumIndexNum(){

        /**
         * 解决问题: 定义一个数组,写一个方法 用于求取指定下标到指定下标 的数据,怎么做才能最快
         * 思路:1、借用另一个数组存储 0-指定下标数据之和。
         */
        long start = System.currentTimeMillis();
        int[] array = {6,4,3,2,-4,5};
        int[] help = new int[6];
        for (int i=0; i<array.length ;i++){
            if(i==0){
                help[i] = array[i];
            }else{
                help[i] = help[i-1]+array[i];
            }
        }
        /**
         * 这样以后如果需要哪个下标到那个下标之和 【L,R】,就可以先拿help的第R个数据之和 减去 help数组的L-1的数据就可以了。
         * L=2,R=5   这两个分别是下标
         */
        System.out.println("得到执行下标与下标之和是:"+ this.sum(help,2,5));
        long end = System.currentTimeMillis();
        System.out.println("用时:"+( end - start));
    }

    public int sum(int[] help,int L,int R){
        if(help.length-1 < R || R < 0 || (L-1) < 0 || L > help.length-1 ){
            return 0;
        }
      return help[R] - help[L-1];
    }

You can nearly always enjoy something if you make up your mind firmly that you will.

只要你下定决心做某件事,总能从中找到乐趣。



版权声明:本文为weixin_45213302原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。