NC407. 区间子数组个数
描述
示例1
输入:
[2,1,4,6,3],2,4
输出:
6
示例2
输入:
[2,1,4,3],2,3
输出:
3
说明:
[2] , [2,1] , [3]C++ 解法, 执行用时: 32ms, 内存消耗: 4124KB, 提交时间: 2022-05-05
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param l int整型 * @param r int整型 * @return int整型 */ int countSubarray(vector<int>& nums, int l, int r) { // write code here int resr=0; int resl=0; int mr=0; int ml=0; for(int i=0;i<nums.size();i++){ if(nums[i]<=r){ resr+=(i-mr+1); }else mr=i+1; if(nums[i]<l){ resl+=(i-ml+1); }else ml=i+1; } return resr-resl; } };
C++ 解法, 执行用时: 33ms, 内存消耗: 4132KB, 提交时间: 2022-08-02
class Solution { public: int countSubarray(vector<int>& nums, int l, int r) { int L = 0, R = 0, x = 0, y = 0; for (int i = 0; i < nums.size(); i++) { if (nums[i] <= r) { R += (i - x + 1); } else x = i + 1; if (nums[i] < l) { L += (i - y + 1); } else y = i + 1; } return R - L; } };
C++ 解法, 执行用时: 35ms, 内存消耗: 4108KB, 提交时间: 2022-07-06
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param l int整型 * @param r int整型 * @return int整型 */ int countSubarray(vector<int>& nums, int l, int r) { // write code here int res_left=0,res_right=0; int min_left_start=0,min_right_start=0; for(int i=0;i<nums.size();++i){ if(nums[i]<=r){ res_right+=(i-min_right_start+1); }else min_right_start=i+1; if(nums[i]<l){ res_left+=(i-min_left_start+1); }else{ min_left_start=i+1; } } return res_right-res_left; } };
C++ 解法, 执行用时: 36ms, 内存消耗: 4164KB, 提交时间: 2022-08-06
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param l int整型 * @param r int整型 * @return int整型 */ int countSubarray(vector<int>& nums, int l, int r) { // write code here int resr=0; int resl=0; int mr=0; int ml=0; for(int i=0;i<nums.size();i++) { if(nums[i]<=r) { resr+=(i-mr+1); } else mr=i+1; if(nums[i]<l) { resl+=(i-ml+1); } else ml=i+1; } return resr-resl; } };
C++ 解法, 执行用时: 38ms, 内存消耗: 4108KB, 提交时间: 2022-05-02
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param l int整型 * @param r int整型 * @return int整型 */ int countSubarray(vector<int>& nums, int l, int r) { // write code here int res_left = 0; int res_right = 0; int min_left_start = 0; int min_right_start = 0; for (int i = 0; i < nums.size(); i++) { if (nums[i] <= r) { //min_right_start = i; res_right += (i - min_right_start + 1); } else { min_right_start = i + 1; } if (nums[i] < l) { //min_left_start = i; res_left += (i - min_left_start + 1); } else { min_left_start = i + 1; } } //cout << res_right << " " << res_left << endl; return res_right - res_left; } };