1. Circular Nested Search
Intuition
For each element at index i, scan (i + 1) % N, (i + 2) % N, ..., (i + N - 1) % N until a strictly greater element is found.
Algorithm
- Step 1: Initialize array
resof sizeNfilled with-1. - Step 2: Loop
ifrom 0 toN - 1. - Step 3: Loop
offsetfrom 1 toN - 1. - Step 4: Check index
j = (i + offset) % N. Ifnums[j] > nums[i], setres[i] = nums[j]and break. - Step 5: Return
res.
#include <iostream>#include <vector> class Solution {public: std::vector<int> nextGreaterElements(std::vector<int>& nums) { int n = nums.size(); std::vector<int> res(n, -1); for (int i = 0; i < n; i++) { for (int offset = 1; offset < n; offset++) { int j = (i + offset) % n; if (nums[j] > nums[i]) { res[i] = nums[j]; break; } } } return res; }}; int main() { Solution solver; std::vector<int> nums = {1, 2, 1}; std::vector<int> ans = solver.nextGreaterElements(nums); std::cout << "Output: ["; for (size_t i = 0; i < ans.size(); i++) { std::cout << ans[i] << (i + 1 < ans.size() ? ", " : ""); } std::cout << "]" << std::endl; return 0;}Time & Space Complexity
- Time complexity:
O(N^2)— For each index i, we search up to N - 1 subsequent circular positions using modulo indexing. - Space complexity:
O(1)— O(1) auxiliary space beyond the output array.
Why Brute Force Doesn't Scale:
Circular quadratic scan re-evaluates all N-1 offsets per element.
With N = 10,000, 2N Modulo Stack runs in 20,000 operations vs 100,000,000 operations for brute force.