2021/10/9 刷题Day3

这篇博客介绍了两个算法问题的解决方案。第一个是将数据流转化为不相交的区间,通过排序和比较实现高效处理。第二个问题是找到爬楼梯的最小花费,通过动态规划计算每一步的最小成本。这两个问题都涉及到数据处理和优化策略。
摘要由CSDN通过智能技术生成

题目一 将数据流变为多个不相交的区间

<script>
  var SummaryRanges = function() {
    this.num = [];
  };


  SummaryRanges.prototype.addNum = function(val) {
    if(this.num.includes(val)){  //已存在
      return;
    }
    //新元素,push并且排序
    this.num.push(val);
    this.num.sort((a,b)=>a-b);
  };


  SummaryRanges.prototype.getIntervals = function() {  //获得区间
    let arr = [];  //区间数组
    if(this.num.length === 0){
      return arr;
    }
    for(let i=0;i<this.num.length;i++){  //num是排序好的数组,新进入的值,一定是加入右边的
      let curNum = this.num[i];
      if(arr.length === 0){   //区间数组为空,存进去第一个值
        arr.push([curNum,curNum])
      }else{  //区间数组中已有,进行判断(第一项一定是最小的那个)
        let lastNum = arr[arr.length-1][1]; //目前最右区间的末尾值
        if(lastNum+1 === curNum){  //连续的
          arr[arr.length-1][1] = curNum;  //更新区间的末尾值
        }
        else {  //不连续的
          arr.push([curNum,curNum]);  //直接存入一个区间
        }
      }
    }
    return arr;
  };


</script>

题目二 使用最小花费爬楼梯

<script>
  let cost=[1, 100, 1, 1, 1, 100, 1, 1, 100, 1];
  //找出第i步的最小花费,则i+1的最小花费就是i加上i+1或者i-1加上i+1
  //cost长度范围是[2,1000],不需要考虑一个台阶
  var minCostClimbingStairs = function(cost) {
    cost.push(0);  //往末尾添加一个0.到达顶层
    cost.unshift(0);  //往头部也加一个0. 这样判断位置就可以直接i-1 和 i-2 的判断了
    let costSum = [0,cost[1]];  //每一步的最小花费
    for(let i=2;i<cost.length;i++){  //头部有一个0
      //cost是目前楼梯要的花费,costSum中存储了,前面每一个楼梯的最小花费
      let temp = Math.min(cost[i]+costSum[i-1],cost[i]+costSum[i-2]);  //1+1的走法和直接2的走法
      costSum.push(temp);  //存储目前楼梯的最小花费
    }
    console.log(costSum);
    return costSum[costSum.length-1];  //取出最后一个值
  };
  console.log(minCostClimbingStairs(cost));
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值