演算法:計算陣列指定索引內的累計之和
阿新 • • 發佈:2022-04-22
演算法:計算陣列指定索引內的累計之和
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); } }