标签:right target Offer int 57 II 序列 sum left
剑指 Offer 57 - II. 和为s的连续正数序列
输入一个正整数 target
,输出所有和为 target
的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例 1:
输入:target = 9 输出:[[2,3,4],[4,5]]
示例 2:
输入:target = 15 输出:[[1,2,3,4,5],[4,5,6],[7,8]]
限制:
1 <= target <= 10^5
1 class Solution { 2 public: 3 vector<vector<int>> findContinuousSequence(int target) { 4 int left = 1; 5 int right = 2; 6 vector<vector<int>> ans; 7 while (left < right) { 8 /* 区间[left, right]元素之和为sum = Sum2 - Sum1 = (right + left) * (right - left + 1) / 2 9 *1~left - 1元素之和:Sum1 = (left - 1) * left / 2 10 *1~right元素之和:Sum2 = right * (right + 1) / 2 11 */ 12 int sum = (right + left) * (right - left + 1) / 2; 13 if (sum == target) { 14 vector<int> tmp; 15 for (int i = left; i <= right; i++) { 16 tmp.emplace_back(i); 17 } 18 ans.emplace_back(tmp); 19 left++; 20 } else if (sum < target) { // 需扩大区间范围 21 right++; 22 } else { // 需缩小区间范围 23 left++; 24 } 25 } 26 return ans; 27 } 28 };
标签:right,target,Offer,int,57,II,序列,sum,left 来源: https://www.cnblogs.com/MGFangel/p/16322602.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。