文章图片
【前言】:
大家好呀!我是小鱼儿,从今天开始,鱼儿就要和大家一起刷力扣了题目:单调数列
伙伴们,一起冲呀!!!
文章图片
原题链接:力扣
文章图片
分析:
这道题只是要求单调,所以我们要考虑单调递增和单调递减两种情况思路:
我们可以通过数组遍历的方式,用中间变量来记录是否单调,如果先后两个数组元素满足单调,该变量就加一,如此遍历到数组结束。
如果该数组整个都是单调的,那么它所对应的中间变量的值必定也跟着增加到了一个定值:数组长度-1
Java语言版本:
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;
}
好了,咱们今天的题目就到这里了,咱们下个题目见
文章图片
【一起刷好题|LeetCode刷题计划——单调数列】
推荐阅读
- [LeetCode][Java] Trapping Rain Water
- [LeetCode] 407. Trapping Rain Water II
- [LeetCode] 448.Find All Numbers Disappeared in an Array
- leetcode|递归回溯的几个小题目
- LeetCode|450. 删除二叉搜索树中的节点
- leetcode|算法之快慢指针
- leetcode|快慢指针之练习【2】
- [LeetCode] 42. Trapping Rain Water
- 202. Happy Number(LeetCode)