日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

leetcode1658.将x见到0的最小操作数

發(fā)布時間:2023/12/20 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode1658.将x见到0的最小操作数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目大意

解題思路

分析題意,實(shí)際上是從數(shù)組的左半部分和右半部分分別取出一部分,兩部分的和為x即可,找到最短的組合.

將nums從左累加,得到leftacc,將nums從右累加,得到rightacc. 兩個指針left指向leftacc的左端點(diǎn),right指向rightacc的左端點(diǎn).

若leftacc[left]+rightacc[right] == x:表示符合條件,記錄一下;
若< x:表示需要加大當(dāng)前數(shù)組,只能讓left移動一位;
若>x:表示需要減小當(dāng)前數(shù)組,只能讓right移動一位;

class Solution { public:int minOperations(vector<int>& nums, int x) {int length = nums.size();vector<int> leftAcc(length + 1, 0);vector<int> rightAcc(length + 1, 0);for (int i = 0; i < length; ++i) {leftAcc[i + 1] = leftAcc[i] + nums[i];}for (int i = length - 1; i >= 0; --i) {rightAcc[i] = rightAcc[i + 1] + nums[i];}int res = INT_MAX, left = 0, right = 0;while (left <= right && right <= length) {if (leftAcc[left] + rightAcc[right] == x) {res = min(res, length - right + left);++right;++left;}else if (leftAcc[left] + rightAcc[right] < x) {++left;}else {++right;}}return res == INT_MAX ? -1 : res;} };

總結(jié)

以上是生活随笔為你收集整理的leetcode1658.将x见到0的最小操作数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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