算法:计算数组指定索引内的累计之和

算法:计算数组指定索引内的累计之和
        package com.ArraysDemo;
        //设计一个类
        public  class Demo01 {
            public static class RangeSum2{
            //设计一个数组
            private int[] preSum;
            //设计一个带数组参数的构造器;
            //设计目的:
            //获取数组长度N
            //开辟一个相应的数组空间preSum
            //使首元素相等
            //然后执行一个操作:令i=1;和0位置的数相加将值给preSum,实现依次循环累加赋值
            public  RangeSum2(int array[]){
                //数组长度为N
                int N = array.length;
                //给数组preSum开辟了一个长度为N的空间
                preSum =new int[N];
                //preSum为数组的首位
                preSum[0] =array[0];
        //这里实际proNum从0开始计算;则长度是从1开始计数;所以i<n;不能等于长度本身
                for(int i=1;i<N;i++){
                    //算法核心:将i索引的前一个值和当前值相加,赋值给i索引的当前值
                    preSum[i]= preSum[i-1]+array[i];
                }
            }
            /*
            这里已经算出了全部的累加数;记录到preSum[i]
            通过传入的下标索引,将对应的值给到下面的preSum[R];
            即这里交出的是到索引处的依次累加和
             */
            //设计一个方法,传入两个数;执行;a-b数组相加
            //原理:如果是0;则返回b的数组值
            //否则,返回a的数组值-b的索引-1的数组值
            public int RangeSum2(int L,int R){
                /*
                preSum[R]到R的累加和;减去之前的累加和;即为指定累加和
                 */
                return L ==0?preSum[R]:preSum[R]-preSum[L-1];
            }
            }
            //方法二:适用与频繁的计算操作
            public static class RangSum1{
                private int[] arr;
                public RangSum1(int []array){
                    arr= array;
                }
            public int rangeSum(int L,int R){
                    int sum = 0;
                    //依次对前面的数进行相加操作
                    for (int i =L;i<=R;i++){
                        sum +=arr[i];
                    }
                    return sum;
            }
            }
            public static void main(String[] args) {
                int []arr={1,3,5,6,7,8,54,34,23};
                RangeSum2 rangeSum2 = new RangeSum2(arr);
                int sum2 = rangeSum2.RangeSum2(2, 2);
                RangSum1 rangSum1 = new RangSum1(arr);
                int sum = rangSum1.rangeSum(2, 2);
                System.out.println(sum);
                System.out.println(sum2);
            }
        }

posted @ 2022-04-22 13:06  爱豆技术部  阅读(176)  评论(0)    收藏  举报