#include<vector> #include<climits> using std::vector;
classSolution { public: voidops(vector<int> &nums, int start, int end) { int i; int min = INT_MAX; for (i = start; i < end; i++) { if (nums[i] < min) { min = nums[i]; } } for (i = start; i < end; i++) { if (nums[i] == min) { nums[i] = 0; } } } intminOperations(vector<int> &nums) { // 滑动窗口 int left = 0, right = 0; int n = nums.size(); int res = 0; while (left < n) { while (left < n && nums[left] == 0) { left++; } right = left; while (right < n && nums[right] > 0) { right++; } // [left, right) if (left == right && left == n) { break; } ops(nums, left, right); res++; //left = right; } return res; } };
#include<stack> #include<vector> using std::vector; using std::stack;
classSolution { public: intminOperations(vector<int> &nums) { stack<int> s; int res = 0; for (int a : nums) { while (!s.empty() && s.top() > a) { s.pop(); } if (a == 0) continue; if (s.empty() || s.top() < a) { res++; s.push(a); } } return res; } };