当前位置: 首页 > 后端技术 > Java

归并排序的扩展问题

时间:2023-04-01 19:41:52 Java

归并排序的扩展:(左神算法笔记)小和问题在一组数组中,将每个数左边小于当前数的数相加,即称为数组的小和。找出数组的最小总和。例:[1,3,4,2,5],1左边的数小于1,否;3左边的数小于3,1;4左边的数小于4、1、3;2左边小于2的小数,1;5左边小于5,1,3,4,2的数;所以数组的小和是1+1+3+1+1+3+4+2=16.publicclassSmallSum{staticintsmallSum(int[]arr){if(arr==null||arr.长度<2)返回0;返回过程(arr,0,arr.length-1);}//在arr[left,Right]中必须排序,而且是小而私有的staticintprocess(int[]arr,intleft,intright){if(left>=right)return0;intmid=left+(right-left)/2;返回过程(arr,左,中)+过程(arr,中+1,右)+合并(arr,左,中,右);}privatestaticintmerge(int[]arr,intleft,intmid,intright){int[]help=newint[right-left+1];inti=0,a=left,b=mid+1;int资源=0;while(a<=mid&&b<=right){if(arr[a]arr[b])res+=mid-a+1;帮助[i++]=arr[b]