6 questions. Covers Monotonic deque.
Questions 1 to 5 of 6
cpp #include <cstddef> #include <deque> #include <iostream> #include <vector> std::vector<int> window_max(const std::vector<int>& nums, std::size_t k) { std::vector<int> result; if (k == 0) { return result; } std::deque<std::size_t> dq; for (std::size_t i = 0; i < nums.size(); ++i) { if (!dq.empty() && dq.front() + k <= i) { dq.pop_front(); } while (!dq.empty() && nums[dq.back()] <= nums[i]) { dq.pop_back(); } dq.push_back(i); if (i + 1 >= k) { result.push_back(nums[dq.front()]); } } return result; } int main() { std::vector<int> nums{1, 4, 2, 6, 3}; for (int m : window_max(nums, 3)) { std::cout << m << ' '; } std::cout << '\n'; }
cpp #include <cstddef> #include <deque> #include <iostream> #include <vector> int main() { std::vector<int> nums{2, 2, 1}; std::size_t k = 2; std::deque<std::size_t> dq; for (std::size_t i = 0; i < nums.size(); ++i) { if (!dq.empty() && dq.front() + k <= i) { dq.pop_front(); } while (!dq.empty() && nums[dq.back()] <= nums[i]) { dq.pop_back(); } dq.push_back(i); std::cout << "i=" << i << " adds " << nums[i] << " | deque:"; for (std::size_t idx : dq) { std::cout << ' ' << idx << '(' << nums[idx] << ')'; } std::cout << '\n'; } }
8 3 2
k
cpp #include <cstddef> #include <deque> #include <iostream> #include <vector> int main() { std::vector<int> nums{8, 3, 2}; std::size_t k = 2; std::deque<std::size_t> dq; for (std::size_t i = 0; i < nums.size(); ++i) { while (!dq.empty() && nums[dq.back()] <= nums[i]) { dq.pop_back(); } dq.push_back(i); if (i + 1 >= k) { std::cout << nums[dq.front()] << ' '; } } std::cout << '\n'; }
Use the arrows to put the steps in order.
dq.front() + k <= i
i - k >= dq.front()
+
-
size_t
i - k
front()
4 question(s) left on this page.