class Solution { public: vector<vector<int>> rtn; int k; vector<vector<int> > FindContinuousSequence(int sum) { k = sum; vector<int> presum(k, 0); for (int i = 1; i < k; i++) { presum[i] += presum[i - 1] + i; } for (int i = 1; i < k - 1; i++) { vector<int> res = helper(i, k - 1, presum); if (res.size()) { rtn.push_back(res); } } return rtn; } vector<int> helper(int l, int r, vector<int> presum) { int lo = l, hi = r; for (; lo < hi;) { int mid = lo + hi >> 1; if (presum[mid] - presum[l - 1] < k) lo = mid + 1; else hi = mid; } vector<int> res = {}; if (presum[lo] - presum[l - 1] == k) { for (int i = l; i <= lo; i++) { res.push_back(i); } } return res; } };