算法题解-汇总区间

简介: 算法题解-汇总区间

题目


给定一个无重复元素的有序整数数组 nums 。返回恰好覆盖数组中所有数字的最小有序区间范围列表 。也就是说,nums的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于nums的数字x。

输入: nums = [0,1,2,4,5,7]
输出: ["0->2","4->5","7"]


题解


第一种


我们在函数中首先声明一个空数组res用于存储所有的区间字符串,然后在声明一个变量start来表示当前区间的起始数字和一个end变量来表示当前区间的结束数字,最后声明一个len变量来记录当前区间的长度,接下来我们使用for循环遍历数组nums中的每一个元素,如果当前元素是连续区间中的数字,则更新end变量和len变量的值,如果当前元素不是连续区间中的数字,则将当前区间的字符串表示加入到res数组中,然后重新设置start变量和end变量以及len变量的值,如果当前区间的长度为1,则直接将start变量加入到res数组中,最后将存储所有区间的字符串res数组返回即可

var summaryRanges = function(nums) {
    let res = [];
    let start = nums[0];
    let end;
    let len = 1;
    for(let i=1;i<nums.length+1;i++){
      if(start+len==nums[i]){
        end = nums[i];
        len++;
      }else{
        if(len==1){
          res.push(start+'');
          start = nums[i];
          continue;
        }
        res.push(start+'->'+end);
        start = nums[i];
        len = 1;
      }
    }
    return res;
  };


第二种


我们首先在函数中声明一个空数组res,然后在数组末尾添加一个NaN非数字的值,这种操作是为了确保最后一个数字也能被处理,我们接下来使用两个嵌套的for循环来遍历数组中的数字,第一个循环从第一个数字开始,第二个循环从第二个数字开始,如果当前数字与前一个数字之差等于1,则继续循环,否则我们将当前数字与前一个数字之间的范围添加到res数组中,如果当前数字与前一个数字相等,则只将一个数字添加到res数组中,在循环过程中,每次找到一个范围后,将外层循环的索引值更新为内层循环的索引值减1,以便跳过已经处理过的数字,最后我们将res数组返回出去即可

var summaryRanges = function(nums) {
    let res = []
    nums.push(NaN);
    for(let i=0;i<nums.length-1;i++){
        for(let j=i+1;j<nums.length;j++){
            if(nums[j] - nums[j-1] == 1){
                continue;
            }else{
                res.push(nums[i] === nums[j-1] ? 
                `${nums[i]}` : `${nums[i]}->${nums[j-1]}`);
                i = j-1;
                break;
            }
        }
    }
    return res;
};
相关文章
|
9月前
|
算法 测试技术 C#
C++二分查找算法:包含每个查询的最小区间
C++二分查找算法:包含每个查询的最小区间
|
9月前
|
人工智能 算法 BI
class077 区间dp-下【算法】
class077 区间dp-下【算法】
70 0
|
存储 算法 C++
C++基础算法离散化及区间合并篇
C++基础算法离散化及区间合并篇
184 0
|
9月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1 算法训练 区间k大数查询
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1 算法训练 区间k大数查询
56 0
|
8月前
|
存储 SQL 算法
高效日程管理:利用区间合并算法优化活动安排【python LeetCode57】
高效日程管理:利用区间合并算法优化活动安排【python LeetCode57】
|
8月前
|
存储 算法 搜索推荐
掌握区间合并:解决实际问题的算法策略和应用案例【python LeetCode题目56】
掌握区间合并:解决实际问题的算法策略和应用案例【python LeetCode题目56】
|
9月前
|
算法 C++
c++算法学习笔记 (12) 区间合并
c++算法学习笔记 (12) 区间合并
|
8月前
|
算法
基于仿射区间的分布式三相不对称配电网潮流算法matlab仿真
```markdown # 摘要 本课题聚焦于基于仿射区间的分布式三相配电网潮流算法在MATLAB2022a中的仿真。算法利用仿射运算处理三相不平衡情况及分布式电源注入,旨在提供比区间算法更精确的不确定区域。仿真结果展示了算法优势。核心程序设计考虑了PQ、PV及PI节点,将不同类型的节点转换统一处理,以适应含分布式电源的配电网潮流计算需求。 ``` 这个摘要以Markdown格式呈现,总字符数为233,满足了240字符以内的要求。
|
9月前
|
存储 机器学习/深度学习 人工智能
【算法基础】基础算法(三)--(双指针算法、位运算、离散化、区间合并)
【算法基础】基础算法(三)--(双指针算法、位运算、离散化、区间合并)
|
9月前
|
人工智能 算法
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)

热门文章

最新文章