日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

327 区间和的个数

發(fā)布時(shí)間:2023/11/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 327 区间和的个数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述

Given an integer array nums, return the number of range sums that lie in [lower, upper] inclusive.
Range sum S(i, j) is defined as the sum of the elements in nums between indices i and j (i ≤ j), inclusive.

Note:
A naive algorithm of O(n2) is trivial. You MUST do better than that.

Example:

Input: nums = [-2,5,-1], lower = -2, upper = 2,
Output: 3
Explanation: The three ranges are : [0,0], [2,2], [0,2] and their respective sums are: -2, -1, 2.

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/count-of-range-sum

解題思路

我自己其實(shí)是沒有什么思路的,只想到了暴力加前綴和,其實(shí)也思考了線段樹,但是線段樹求解區(qū)間和的速度比前綴和明顯慢很多。

看了題解的第一種解法,并自己實(shí)現(xiàn)了一下,爆了一發(fā)long long,第二遍就過了,雖然思路不是自己的但是還是很開心的。

決定跟隨官方題解仔細(xì)研究一下這道題。

題解一

主要的思路在于考慮解決一個(gè)子問題:兩個(gè)升序排列的數(shù)組a,ba,ba,b,求a[i]<b[j]a[i] < b[j]a[i]<b[j](i,j)(i,j)(i,j)對數(shù)量

實(shí)現(xiàn)代碼:

class Solution { public:typedef long long ll;ll ans = 0;ll Lower, Upper;void Merge(vector<ll> &sum, vector<ll> &tmp, int l, int r){if(r - l <= 1) return ;int mid = (l + r) >> 1;Merge(sum, tmp, l, mid);Merge(sum, tmp, mid, r);int pl = mid, pr = mid;int idx = l;while(idx < mid){while(pl < r && sum[pl] < sum[idx] + Lower) ++pl;while(pr < r && sum[pr] <= sum[idx] + Upper) ++pr;ans += pr - pl;++idx;}int i = l, j = mid;idx = l;while(i < mid || j < r){if(j >= r || i < mid && sum[i] < sum[j]){tmp[idx++] = sum[i++];} else {tmp[idx++] = sum[j++];}}for(int i=l; i<r; ++i){sum[i] = tmp[i];}}int countRangeSum(vector<int>& nums, int lower, int upper) {int n = nums.size();Lower = lower; Upper = upper;vector<long long > sum(n+1, 0);vector<long long > tmp(n+1, 0);for(int i=1; i<=n; ++i){sum[i] = sum[i-1] + nums[i-1];}Merge(sum, tmp, 0, n+1);return ans;} };

總結(jié)

以上是生活随笔為你收集整理的327 区间和的个数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。