Problem: 1658. 将 x 减到 0 的最小操作数-Minimum Operations to Reduce X to Zero求出前缀数组以及后缀数组然后对遍历后缀数组对每个数字二分查找 ax - addfix[i]然后若满足 ind i prefix[ind]a求出最小值mi min(mi, n - i 1 ind);最后返回最小值即可Codeclass Solution { public: int minOperations(vectorint nums, int x) { int n nums.size(); vectorint prefix{0}, addfix(n2, 0); for(int i : nums) prefix.push_back(prefix.back() i); for(int i n; i 1; i--) { addfix[i] addfix[i1] nums[i-1]; } int ind, a, mi INT_MAX; for(int i n1; i 1; i--) { a x - addfix[i]; if(a 0) break; if(a 0) { mi min(mi, n - i 1); continue; } else if(a nums[0]) { ind lower_bound(prefix.begin(), prefix.end(), a) - prefix.begin(); if(ind i prefix[ind] a) { mi min(mi, n - i 1 ind); } } } if(mi INT_MAX) return -1; return mi; } };方案2class Solution { public: int minOperations(vectorint nums, int x) { int n nums.size(), s 0, ind, a, mi INT_MAX; vectorint prefix{0}, addfix(n2, 0); for(int i : nums) { s i; prefix.push_back(s); } for(int i 0; i n; i) { a x - (s - prefix[i]); if(a 0) { ind lower_bound(prefix.begin(), prefix.end(), a) - prefix.begin(); if(ind i prefix[ind] a) { mi min(mi, n - i ind); } } } if(mi INT_MAX) return -1; return mi; } };