力扣统计移除递增子数组的数目

bool isIncreasing(int* nums, int l, int r, int numsSize) {
    for (int i = 1; i < numsSize; i++) {
        if (i >= l && i <= r + 1) {
            continue;
        }
        if (nums[i] <= nums[i - 1]) {
            return false;
        }
    }
    if (l - 1 >= 0 && r + 1 < numsSize && nums[r + 1] <= nums[l - 1]) {
        return false;
    }
    return true;
}

int incremovableSubarrayCount(int* nums, int numsSize) {
    int res = 0;
    for (int i = 0; i < numsSize; i++) {
        for (int j = i; j < numsSize; j++) {
            if (isIncreasing(nums, i, j, numsSize)) {
                res++;
            }
        }
    }

    return res;
}

这个题目看似简单,但其实我个人认为难度还是比较高的,下面我们就来详细了解一下这个代码。我们重点看一下bool isIncreasing这个函数。 首先我们来认识一下bool是什么,bool又称布尔类型,假如我们用布尔类型定义了一个函数,那么我们的返回值只能是ture或者false。好,知道这个知识点之后我们来进行下一步,假设我们的nums数组为[1,2,3,4],我们通过一个函数的嵌套,将数组里的每一个子数组都传输到bool isIncreasing进行比较。我们先看第一个语句 if (i >= l && i <= r + 1),continue。意思就是如果i在我们这个子数组的范围之内,那么我们就跳过这个循环,直接开始下一个循环,直到i不在我们的子数组范围之内。接下来,i不在我们的子数组范围之内了我们开始下一步的判断if (nums[i] <= nums[i - 1]),如果nums[i] <= nums[i - 1]说明去掉子数组的数组并不是一个递增的数组,返回false。下一步我们判断l-1和r+1有没有越界,并且判断末位的值是否大于首位,如果不是返回false,如果是返回true。当我们的if (isIncreasing(nums, i, j, numsSize))判断为真时res++,res在这里的作用便是统计移除递增子数组的数目,最后我们返回res。

好了这一题就讲解到这里了,其实做完之后会觉得难度还可以,也没有想象中的那么难,所以我们要多加练习。

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值