LeetCode刷题计划——单调数列

简介: LeetCode刷题计划——单调数列

【前言】:

大家好呀!从今天开始,我就要和大家一起刷力扣了

伙伴们,一起冲呀!!!

ed47319a87ab4d05b8debb93f7ea21a0.gif

题目:单调数列

原题链接:力扣

分析:

这道题只是要求单调,所以我们要考虑单调递增和单调递减两种情


思路:

📝我们可以通过数组遍历的方式,用中间变量来记录是否单调,如果先后两个数组元素满足单调,该变量就加一,如此遍历到数组结束。

📝如果该数组整个都是单调的,那么它所对应的中间变量的值必定也跟着增加到了一个定值:数组长度-1

🌰Java语言版本:

1.class Solution {
    public boolean isMonotonic(int[] nums) {
        // 初始化两个中间变量,两个中间变量分别对应单调递增和单调递减两种情况
        int flag1 = 0, flag2 = 0; 
        for (int i = 1; i < nums.length; ++i) {
            // 当前后两数相等时也满足单调
            if (nums[i] >= nums[i - 1]) { 
                ++flag1; // 代表递增情况的中间变量flag1加一
            }
            if (nums[i] <= nums[i - 1]) {
                ++flag2; // 代表递减情况的中间变量flag2加一
            }
        }
        // 循环执行了nums.length - 1次,且每次只执行一次满足条件的if语句
        // 例如如果每次执行的都是满足递增的if语句,那循环结束后中间变量值自然等于nums.length - 1,
        // 即该数组单调递增,如果是单调递减的情况也同理
        if (flag1 == nums.length - 1 || flag2 == nums.length - 1) {
            return true; // 满足单调返回true
        }
        return false;
    }
}

🌰C语言版本:

bool isMonotonic(int* nums, int numsSize){
int flag1 = 0;//初始化中间变量
    int flag2 = 0;
    int k = numsSize - 1;
    for(int i = 1; i <= k; ++i){  //只循环k次,也就是说要想使中间变量的值等于k;循环中的两个if语句每次只能执行同一个
        if(nums[i] >= nums[i-1]){ //比如如果每次执行的if都是单调递增的,那循环结束中间变量值自然等于k,也就是该数组是单增的,返回true
            ++flag1;                                                                 
        }
        if(nums[i] <= nums[i-1]){
            ++flag2;
        }
    }
    if(flag1 == k || flag2 == k){ 
        return true;             
    }
    return false;
}

好了,咱们今天的题目就到这里了,咱们下个题目见😁

bc9957424d01445aa7d375f37152fcd3.jpg


相关文章
|
12天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
12天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
13天前
|
索引
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
|
13天前
|
算法
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
|
13天前
|
算法 容器
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
|
13天前
【LeetCode刷题】专题三:二分查找模板
【LeetCode刷题】专题三:二分查找模板
【LeetCode刷题】专题三:二分查找模板
|
13天前
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
|
13天前
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
|
13天前
【LeetCode刷题】滑动窗口思想解决:最大连续1的个数 III、将x减到0的最小操作数
【LeetCode刷题】滑动窗口思想解决:最大连续1的个数 III、将x减到0的最小操作数
|
13天前
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串