11.小和问题(归并排序拓展)
小和问题:
在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数
的小和。求一个数组 的小和。
例子:[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
int Merge(int arr[], int left, int mid, int right) { if (right == left) return 0; int *pTemp = new int[right-left+1]; int i = 0; int res = 0; int p = mid + 1; while (left <= mid && p <= right) { res += arr[left] < arr[p] ? arr[left]*arr[right-p+1] : 0; pTemp[i++] = arr[left] <= arr[p] ? arr[p++] : arr[left++]; } while (left <= mid) { pTemp[i++] = arr[left++]; } while (p <= right) { pTemp[i++] = arr[p++]; } for (int j = 0; j <= right-left+1; j++) { arr[left+j] = pTemp[j]; } return res; } int SmallSum(int arr[], int left, int right) { if (!arr) return 0; if (left == right) return 0; int mid = left + ((right-left)>>1); return SmallSum(arr, left, mid) + SmallSum(arr, mid+1, right) + Merge(arr, left, mid, right); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具