leetcode 之单调数列 一道简单的题目也有不简单的地方
哈喽哈喽,我是你们的金樽清酒,每日分享一题。今天我给大家分享的是单调数列的。看似是一道简单的题目,但是它的解法十分简洁,一些内置的函数我都没有见过。
题目
如果数组是单调递增或单调递减的,那么它是 单调 的。
如果对于所有 i <= j,nums[i] <= nums[j],那么数组 nums 是单调递增的。 如果对于所有 i <= j,nums[i]> = nums[j],那么数组 nums 是单调递减的。
当给定的数组 nums 是单调数组时返回 true,否则返回 false。
示例 1:
输入: nums = [1,2,2,3]
输出: true
示例 2:
输入: nums = [6,5,4,4]
输出: true
示例 3:
输入: nums = [1,3,2]
输出: false
提示:
1 <= nums.length <= 105-105 <= nums[i] <= 105
题目很简单,让我们判断一个数组是单调的嘛。看到这个题目,我想的是遍历一下。然后判断后一项减前一项是否总与第一项和第二项的差是同号的。但是呢,这种写法会有问题,那就是一,二项相等的情况。显然这是不行的。为什么会这么想,因为我做的前一题是否等差就是这么做的。话不多说,直接看正确的答案。
题解
var isMonotonic = function(nums) {
return isSorted(nums) || isSorted(nums.reverse());
};
function isSorted(nums) {
return nums.slice(1).every((item, i) => nums[i] <= item)
}
作者:力扣官方题解
链接:https://leetcode.cn/problems/monotonic-array/solutions/624659/dan-diao-shu-lie-by-leetcode-solution-ysex/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
var isMonotonic = function(nums) { return isSorted(nums) || isSorted(nums.reverse()); }; function isSorted(nums) { return nums.slice(1).every((item, i) => nums[i] <= item) } 帮我分析一下这段代码
这段代码是一个 JavaScript 函数,名为 isMonotonic,其作用是检查给定数组 nums 是否是单调递增或单调递减的。
让我们逐步分析这段代码:
-
var isMonotonic = function(nums) { ... }: 这是一个函数声明,定义了一个名为isMonotonic的函数,它接受一个参数nums,该参数是一个数组。 -
return isSorted(nums) || isSorted(nums.reverse());: 在这一行中,函数isMonotonic返回两个表达式的逻辑或结果:isSorted(nums): 调用isSorted函数检查原始数组nums是否是单调递增或单调递减。isSorted(nums.reverse()): 调用reverse()方法反转数组nums,然后再调用isSorted函数检查反转后的数组是否是单调递增或单调递减。
-
function isSorted(nums) { ... }: 这是一个名为isSorted的函数,它接受一个参数nums,该参数是一个数组。这个函数用于检查给定的数组是否是单调递增的。 -
return nums.slice(1).every((item, i) => nums[i] <= item): 在这个函数中,它使用了数组的slice()方法来获取原数组的一个子数组(从索引 1 开始到末尾),然后调用every()方法对这个子数组进行遍历。every()方法用于检查数组中的每个元素是否满足给定的条件。这里的条件是:当前元素必须大于或等于前一个元素。如果所有元素都满足这个条件,那么数组就是单调递增的,函数返回true;否则返回false。
综上所述,这段代码的作用是判断给定数组 nums 是否是单调递增或单调递减的。它通过调用 isSorted 函数两次来实现,一次是针对原始数组,一次是针对反转后的数组
总结
这道题用了js的内置函数siice()获取了原数组的一个子元素。用every()来遍历检查数组中的元素是否符合条件。最后再反转数组,判断递增递减这么两种情况。reverse()方法就是将数组反转。怎么样是不是很简洁很帅气。
假如您也和我一样,在准备春招。欢迎加我微信shunwuyu,这里有几十位一心去大厂的友友可以相互鼓励,分享信息,模拟面试,共读源码,齐刷算法,手撕面经。来吧,友友们!”