2018网站建设合同,重庆网站建设推广,深圳网站建设 易通鼎,汕头网络推广团队2023-08-26每日一题
一、题目编号
228. 汇总区间二、题目链接
点击跳转到题目位置
三、题目描述
给定一个 无重复元素 的 有序 整数数组 nums 。
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖…2023-08-26每日一题
一、题目编号
228. 汇总区间二、题目链接
点击跳转到题目位置
三、题目描述
给定一个 无重复元素 的 有序 整数数组 nums 。
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说nums 的每个元素都恰好被某个区间范围所覆盖并且不存在属于某个范围但不属于 nums 的数字 x 。
列表中的每个区间范围 [a,b] 应该按如下格式输出
“a-b” 如果 a ! b“a” 如果 a b
示例 1 示例 2 提示
0 nums.length 20-231 nums[i] 231 - 1nums 中的所有值都 互不相同nums 按升序排列
四、解题代码
class Solution {
public:vectorstring summaryRanges(vectorint nums) {vectorstring res;int n nums.size();if(n 0){return res;}if(n 1){res.push_back(to_string(nums[0]));return res;}int left nums[0];int right nums[0];for(int i 0; i n; i){if(i 0){continue;}if(nums[i] ! nums[i-1] 1){if(left right){res.push_back(to_string(left));} else{res.push_back(to_string(left) - to_string(right));}left nums[i];right nums[i];} else{right nums[i];}}if(left right){res.push_back(to_string(left));} else{res.push_back(to_string(left) - to_string(right));}return res;}
};五、解题思路
(1) 记录结果数组为res。有序整数数组的长度为n。
(2) n等于0的时候输出空数组n等于的时候只有一个数。
(3) 记录区间left nums[0],right nums[0]这是初始化的过程。从i等于1开始遍历。
(4) 如果nums[i] 等于 nums[i-1] 1更新右端如果不等于则判断left和right是否相等。如果相等区间为单一数字如果不相等则左端为left右端为right此时再次将left和right更新为nums[i] (当前遍历的位置)。
(5) 当一遍数组遍历完毕后还需要再判断一次left和right是否相等按照(4)中所述的规则记录最后一个区间。
(6) 最后返回结果数组即可。