当前位置:   article > 正文

java算法之前缀值求和_javaj 前缀和

javaj 前缀和

引言

本篇主要讲解,前缀和求值的算法,说白了其实就是求一个数组左右范围内的数据求和。

举个例子:当前数组为[1,2,3,4],那么前缀和为[1,3,6,10]

比如说一个数组{2,3,6,1,9,5,8}对[2,4]范围段的数据求和,这里2、4指的是下标。

前缀和的作用就是快速求一段区间的和,方便查询统计,提高速度。 

  • 算法思路 

 先对下标从0到末位下标的数据累加求和赋值给对应的数组位置,比如{2,4,5,8,3,9,7,4}求和之后是{2,5,11,12,21,26,34},如果求下标[2,4]范围的字段和就是求和后数组的下标4减去下标(2-1)就是对应范围的数据求和,该算法叫做前缀求和算法。

  • 代码演示
  1. package com.czing.study.algorithm.code;
  2. /**
  3. * @Description TODO
  4. * @Author wangchengzhi
  5. * @Date 2022/12/15 10:22
  6. */
  7. public class PreSum {
  8. public static void main(String[] args) {
  9. int [] arry={2,3,6,1,9,5,8};
  10. preSum(arry,0,1);
  11. }
  12. /**
  13. * @Author wangchengzhi
  14. * @Description前缀和算法
  15. * 思路:
  16. *有一个数组[2,3,6,1,9,5,8]
  17. * 计算任意范围内的加和[arr,l,r]
  18. * 比如计算[2,6]
  19. * 先计算累计下标的加和
  20. * [2,5,11,12,21,26,34]
  21. * [2,6]范围的加和就是计算之后的集合下标arr[6]-arr[2-1]
  22. * [l,r]的范围加和就是计算之后的集合下标arr[r]-arr[l-1]
  23. * !!! l和r指的是左右下标,不是自然数那种
  24. * @Date 10:23 2022/12/15
  25. * @Param
  26. * @return
  27. **/
  28. public static void preSum(int[] arry,int left,int right){
  29. if(left<0||right>arry.length-1){
  30. throw new RuntimeException("请确认左右范围是否超出数组本身长度范围!!!");
  31. }
  32. //先求对应集合的加和
  33. int sumPre[] = new int[arry.length];
  34. //加和的初始值为第一位
  35. sumPre[0]=arry[0];
  36. for(int pre=1;pre<arry.length;pre++){
  37. //每个下标的值为前面的加和加上后一位
  38. sumPre[pre] = sumPre[pre-1]+arry[pre];
  39. }
  40. System.out.print("加和之后的数据:");
  41. for(int i=0;i<arry.length;i++){
  42. System.out.print(sumPre[i] +" ");
  43. }
  44. //计算数组中left到right的范围求和
  45. int preSum = left==0 ? sumPre[0]:sumPre[right]-sumPre[left-1];
  46. System.out.printf("数组从"+left+"到"+right+"的范围加和是:");
  47. System.out.println(preSum);
  48. }
  49. }

结言 

前缀和算法是基础的java算法,主要用于快速计算范围区间的数值,小伙伴可以参考代码进行演练测试,代码中对数据的大小和边界异常都进行了处理,欢迎讨论指教。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/871402
推荐阅读
相关标签
  

闽ICP备14008679号