problemscpp
A collection of my answers to algorithm problems in c++.
静态 Public 成员函数 | 所有成员列表
leetcode::minimum_difference_in_sums_after_removal_of_elements::Solution类 参考

#include <leetcode.h>

静态 Public 成员函数

static long long minimumDifference (vector< int > &nums)
 

详细描述

在文件 leetcode.h934 行定义.

成员函数说明

◆ minimumDifference()

long long leetcode::minimum_difference_in_sums_after_removal_of_elements::Solution::minimumDifference ( vector< int > &  nums)
static

在文件 leetcode.cpp2327 行定义.

2327 {
2328 const int n = nums.size() / 3;
2329 auto *left_sum = new long long[n];
2330 auto *right_sum = new long long[n];
2331 long long left_min = 0;
2332 long long right_max = 0;
2333 auto left_n = priority_queue<int>();
2334 auto right_n = priority_queue<int, vector<int>, greater<>>();
2335 for(int i = 0; i < n; i++) {
2336 left_n.push(nums[i]);
2337 left_min += nums[i];
2338 }
2339 for(int i = 3 * n - 1; i >= 2 * n; i--) {
2340 right_n.push(nums[i]);
2341 right_max += nums[i];
2342 }
2343 const long long left_min_preserve = left_min;
2344 const long long right_max_preserve = right_max;
2345 left_sum[0] = left_min;
2346 right_sum[n - 1] = right_max;
2347 for(int i = n; i < 2 * n; i++) {
2348 if(nums[i] < left_n.top()) {
2349 left_min += nums[i] - left_n.top();
2350 left_n.pop();
2351 left_n.push(nums[i]);
2352 }
2353 left_sum[i - n] = left_min;
2354 }
2355 for(int i = 2 * n - 1; i >= n; i--) {
2356 if(nums[i] > right_n.top()) {
2357 right_max += nums[i] - right_n.top();
2358 right_n.pop();
2359 right_n.push(nums[i]);
2360 }
2361 right_sum[i - n] = right_max;
2362 }
2363 long long ans = left_min_preserve - right_sum[0];
2364 for(int i = 0; i < n - 1; i++) {
2365 ans = min(ans, left_sum[i] - right_sum[i + 1]);
2366 }
2367 ans = min(ans, left_sum[n - 1] - right_max_preserve);
2368 delete[] left_sum;
2369 delete[] right_sum;
2370 return ans;
2371 }

被这些函数引用 leetcode::minimum_difference_in_sums_after_removal_of_elements::TEST().


该类的文档由以下文件生成: